• ベストアンサー

char型配列の最大要素数

他の回答でchar型の最大要素数が257となっているのがあったのですが、これはいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.4

あれ、こんなところで話題になっていたのですね。 元のプログラムを書いた者です。 >今まで私がやってきたプログラミングでは最大要素数は256とする物しかなかったので不審に思ったのです。 >256という数字には意味はないと言う事だったのでしょうか? まったく意味がないわけではありません。 Auto変数はスタックに取られるのが普通で、1 byte単位の端数を指定しても次の変数はアクセス可能な境界にあけて取られます。8 byte intのマシンでは、 int x; char c[2]; int y; とAutoを切っても、実際には、 int x; char c[8]; int y; とメモリはとられたりします。 ですから、特に細かい制限なしに大雑把にchar配列を確保する場合、2^nにとっておいたほうが無駄なく使える場合が多いのです。 今回は、「最大255文字」と指定があったので、必要十分な値として257と書きました。指定がなければ、BUFSIZと書いたと思います。 80と書く例が多いのは、昔のTTY端末が1行80colだった伝統のせいでしょう。 256は、128じゃ不足するかも、かといって512じゃ無駄使いかなといった微妙な心理から出てきた数値だと思います。 どっちにしても大きめの数を取ったからといって、gets(3)を使うのは危険です。stdinから入力する場合でも、fgetsを使ってBuffer Over Flowに備えるべきです。

miniture_min
質問者

お礼

そんな理由があったのですね。一つ勉強になりました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

> 今まで私がやってきたプログラミングでは最大要素数は256とする物しかなかったので不審に思ったのです。 > 256という数字には意味はないと言う事だったのでしょうか? 要素数自体は#1の方も言っているように、好きにしてかまわないものです。 ただし、必要な量確保していないと大変なことになります。 どこから256が出てきたかと考えると、 0xFF + 1 と考えるのが自然……かな。 質問者さんがどのようなプログラムを見てきたか分からないのでなんとも言えませんが、趣味の範囲でしょうな。 私なんかは  #define MAX_LEN (80)  char szText[MAX_LEN+1]; とかよくやりますし。 特に指定されていない限り(「文字列は最大○文字とする」など)気にしなくていいのではないでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

fgets()すると、文字列+改行+終端 をchar配列に入れることになる。 問題で、文字列を最大255文字としているので、改行+終端の2バイト分を足して257にしている。 ……と、No.10の方が言っていますね。 fgets()はgets()と違い、改行文字も格納されるのです。  char *fgets(char *szStr, int nCount, FILE *fp)  fpからnCount-1文字 or 改行文字 or 終端文字までを読み込み、終端文字を付加してszStrに格納する あと、他の話題から派生させる時はその話題へのリンクがあったほうがいいと思います。 http://oshiete.nikkeibp.co.jp/kotaeru.php3?q=1872132

miniture_min
質問者

お礼

>他の話題から派生させる時はその話題へのリンクがあったほうがいいと思います。 ご指摘の通りです。申し訳ありません。 >問題で、文字列を最大255文字としているので、改行+終端の2バイト分を足して257にしている。 今まで私がやってきたプログラミングでは最大要素数は256とする物しかなかったので不審に思ったのです。 256という数字には意味はないと言う事だったのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

何がどう悪いと思われたのでしょうか? 配列のサイズは、プログラマが適当に指定できます。 DLLなんかとやりとりする場合には、サイズを合わせる必要があるかもしれませんが、一般的には、自由に決められると思うのですが・ どういう文脈で使われたのかわからないので勘違いしてたらすみません。

miniture_min
質問者

お礼

派生先を書かないと分かりにくかったですね。 申し訳ありません。 回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 配列の最大要素数

    はじめまして。 早速ですがjavaの配列のことなんですが 最大要素数が255に設定されているのですが これは何故か理由を知っている方がいたら教えてください javaにはあまり関係ないことなのかもしれませんが・・・

    • ベストアンサー
    • Java
  • char型配列要素として定義 他

    JAVAプログラミングとしては非常に基本的なことだと思うのですが、いくつかわからないことがあるので教えてください。 まず、0~3までの数字をchar型の配列要素として定義するために、 private static final char[] nch = {○○}; の○○の部分に記述しなければならないことは何ですか? また、繰り返し構文を使うのに、inputstrの文字数の回数だけ繰り返し・配列nchの要素数の回数だけ繰り返しをそれぞれ{int i = 0 ; ○○; i ++} ・ {int j = 0 ; ××; j++}と記述するのですが、○○、××の部分の記述内容はどうなるのでしょうか? 最後に、StringBufferで定義されたbfnをString型に変えて戻り値とするにはreturnの後にどのように記述すればよいのでしょうか? まだプログラミングを始めたばかりで応用がほとんどわからない状態です。回答よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列の要素数を調べる方法

    配列の中にいくつ要素があるか後から調べる方法はあるでしょうか? int test[4][3] = {   {0,1,2},   {0,1,2},   {0,1,2},   {0,1,2}, } ; 上のケースだと、X方向に3、Y方向に4つの 要素があります。しかし、これだとあらかじめいくつ要素があるかを決めて 置かないといけません。 例えば、 int test[] = {0,1,2,3....} みたいに宣言された場合や、 char *test[] = {   "ああああああ",   "いいいいいい",   "うううううう",      ・      ・ //(これは文字列の数を要素数とします) } ; のように宣言された二次元配列などで、後から配列内にいくつ要素があるかを 調べることなどは可能でしょうか?

  • perl 配列の要素数について

    配列の要素数について質問させていただきます。 プログラムの中で、以下のようにファイルの内容を1行ずつ読み込み、配列に入れています。  open (IN, "ファイル名");  @data = <IN>;  close (IN); こういった形で配列に入れていった場合、入れられる最大行数(=最大要素数)はどれくらいになるのでしょうか。 現在100万行のテキストファイルは、問題なく読み込めているようでした。 ご存知の方がおられましたら、ご回答いただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 配列の要素を取得する場合?

    char a[] = "aaaaa"; char *b = "aaaaa"; という宣言があるとき、配列aなら、 sizeof(a)/sizeof(a[0]); で、全体の要素数を求められますが、bの方法で初期化をして、 sizeof(b) / sizeof(b[0]) をやっても、変数bのサイズしか求められません。 bの方法でも、最大要素数を求めることはできますか?

  • 要素数を最大化する組合せ最適化問題について

    要素数を最大化するような組合せ最適化問題(線形計画問題)を解こうとしていますが、 要素数を一度に計算したり、ソートしたりすることはできません。 (そのような関数を線形式で定義するのは難しいと思いますので。) 一方、2つの要素が同一かどうかのみの計算は簡単にできるので、 全ての2要素間で一致/不一致を判断し、不一致の数が最大となるように目的関数を設定して、この問題を解こうかと思っています。 この方法は正しいでしょうか。 例えば、 ある変数の組合せにおいて、 A1=X, A2=Y, A3=X といった結果になるとすると、 bin1=|A1-A2|(=1、不一致) bin2=|A1-A3|(=0、一致) bin3=|A2-A3|(=1、不一致) という風に要素の一致/不一致を計算し、 不一致数(=bin1+bin2+bin3)を最大化するという風に目的関数を定義しようかと思っています。 当然、不一致数と要素数は一致しないわけですが、 不一致数が最大のときに、必ず要素数が最大となるのであれば、 目的関数として問題ないと考えています。 なんとなく正しい気もしますが、本当に正しいのかよくわかりません。 よろしくお願いします。

  • char* 宣言での配列要素アクセスについて

    char* 宣言での配列要素アクセスについて char*型で宣言したポインタ変数に対して 配列の要素でアクセスすると落ちてしまいます。 理由がよくわかりません。 以下コードになります。 (コードA) char* pA = "123456789"; pA[2] = 'A'; 以下のコードの場合は問題ありません。 (コードB) char pB[] = "123456789"; pB[2] = 'B'; 両者の違いがいまいちよく分かりません。 コードAでpA[2]のアドレスを確認すると、 pAのアドレス[+2]を指しているので問題ないともうのですが、 間違っているのでしょうか? pAに対して特別な操作はしていません。 ご教授お願いいたします。

  • CUDAでの配列の最大値について

    質問です。 GPUを用いて配列の最大値を求める処理について 1,隣の要素と比較する。 2,スレッド数だけ離れた要素と比較する。 例えば,配列の要素数16、スレッド数8の場合 1,スレッド0は0番目と1番目の要素を比較 2,スレッド0は0番目と8番目の要素を比較 どちらが高速になると思われますか? 自分は、バンクコンフリクトが少ない2番の方が高速になると思います。 皆様の回答お待ちしております。

  • 配列の要素数

    配列の要素数を求めるプログラムを作りたいのですが

  • 要素数を100個にしろといわれたのですが

    要素数を100個にしろといわれたのですが int main(void){ char str="100"; printf("文字列を入力してください:"); scanf_s("%s",str); put_string(str); putchar('n'); return (0); } この『char str="100";』の部分を『char str[100];』にしたらいいんでしょうか? 教科書をみてやってみたのですがイマイチ理解できずお手上げ状態です 因みにC++です

福祉車両の装備について
このQ&Aのポイント
  • 福祉車両の装備についての質問
  • 福祉車両の購入を検討しているが、どのような装備の車を選べばよいか迷っている
  • 車椅子のまま乗車・降車できる車が必要であり、家族の介護や解除に使用されている方の経験を聞きたい
回答を見る