アプリ版:「スタンプのみでお礼する」機能のリリースについて

#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
char gyou[1024];
int gyousuu = 0;
if ( argc < 2 ){
printf("file mei ga nai\n");
return -1;
}
fp = fopen(argv[1], "r");
if ( fp == NULL ){
printf("fopen dekinai\n");
return -2;
}
while(fgets(gyou, sizeof(gyou), fp) != NULL){
gyousuu++;
}
fclose(fp);
printf("gyousuu=%d\n", gyousuu);
return 0;
}
 以上のプログラムは行数を計算してくれるプログラムです。
  計算結果が
  gyousuu=22 とでます。
 さて、char gyou[1024];でcharの表現範囲は-128~127間ですが、
 gyou[1024]の[1024]とは関係はありますでしょうか!?
  [1024]の意味は”要素数”と参考書に鉛筆書きがありました。
 charの表現範囲である1024は、はるかに超えているみたいですが?
  dharの表現範囲を1024が超えたとしても特に問題はなさそうです!
  このプログラムは動いていますのでは正常です。
  私の
  考え方としまして、何か誤りがありますでしょうか?
  よろしくお願いいたします。

質問者からの補足コメント

  • ご回答誠にありがとうございました。
     申し訳ございません、再度の質問ですが、
    「gyou[1024];=1 行のバイト数がそれ以下であれば問題ない」
     とのことで、間違いございませんでしょうか?
     よろしくお願いいたします。

      補足日時:2015/03/10 21:11
  • 補足ばかりで申し訳ございません_ _
     参考書にあるのですが、Char gyou [1024];の説明に
    「ストリームからデータを読み込むためのchar型の”配列変数を宣言”しました。
    読み込み単位は行単位で行いますので、goyuという名前にしました。」

     とあります。ここでいう、「配列変数を宣言」とありますが何のことだかわか
     りません?補足ばかりでお手数をおかけしておりますが、
      よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/03/11 05:37
  • 温故知新ですが、参考書をよく読むと
    「配列宣言」のことが書いてありました。
     複数の値を持つことができる変数を、配列とよびます。
     今まで使用した変数は、1つの変数に、1つの値だけを記憶できました。配列は
    、1つの”配列変数”に複数の値を記憶できるのです。
     配列も変数であるため、変数宣言を行います。配列がどのような型の値を記憶できるかは、宣言時の型によります。今回の例の場合は、intで宣言しましたから、ひとつひとひとつの値は、int型になります。宣言時には、[ ]内の値によって”配列要素の数"を指定します。これは”添え字”と呼びます。
     以上ですが、以下要点を私なりにまとめました.。
     1)複数の値を持つことができる変数を、”配列”
     2)配列は1つの配列変数に、複数の値を記憶できる(int A1,A2,A3;をint A[3];とできる^^)
     型 変数名  [要素数]

      補足日時:2015/03/14 16:43

A 回答 (4件)

> さて、char gyou[1024];でcharの表現範囲は-128~127間ですが、


> gyou[1024]の[1024]とは関係はありますでしょうか!?
ない。
1024 のほうはただ単に領域の個数を表しているだけで、読み込もうとするファイルの 1 行のバイト数がこれを超えない限り別に 1000 でも 3327 でも構わない(ある程度以上大きくなると別の問題が出てくるが)。
ただ単に 1024 = 2^10 でプログラマにはよく見る数字、かつ、普通のテキストなら 1 行が収まりそうな長さなだけ。
    • good
    • 0
この回答へのお礼

ご回答まことにありがとうございました^^
ない。とのご回答から・・・以下は構文に含まれる意味を他スレから引用しました。
 
肝心の配列ですが・・・
 gyou char[1024];
これの意味は
「符号付き1バイトが1024個並んだ領域を確保し、先頭をgyouと言う名前で参照します」
ので gyou[0] だろうが gyou[100] だろうが1バイトなのです
添字は0から始まるのでこの場合のMAXは1023ですな
 以上で間違いないと思います。
 これは、今後、どなたかの参考になると思い掲示しました。 
私もよく読んで理解を深めたいと存じます。

お礼日時:2015/03/14 16:59

この例題、あなたの実力と全然マッチしてないですよ。


もっと初歩的な例題を
・配列の意味
・文字列と文字配列の関係
を充分理解した上で取り組んで下さい。
    • good
    • 1

うーん、文の区切りがおかしいかな。


char型の/配列変数を宣言、じゃなくって、char型の配列/変数を宣言、ですね。さらに語を補うなら
char型の配列で変数を宣言というところです。
……というか、普通の初心者向け参考書ならここに来るまでの間に配列での変数宣言について書いてあると思うのですが……ひょっとして飛ばし読みとかしてます?
    • good
    • 1

> 「gyou[1024];=1 行のバイト数がそれ以下であれば問題ない」


> とのことで、間違いございませんでしょうか?
そのとおり。ただし、これはこの答を得るだけで満足しないこと。
実際に一行が1024バイトを超えるテキストファイルを読み込ませて、何が起こるかを確認すること。
大丈夫、あなたが思っていないだろう結果になるだけで、実行時エラーになることはないはずだ。
なぜそうなったかがわからなければ fgets() の第二引数の意味を調べること。
この回答への補足あり
    • good
    • 0
この回答へのお礼

以下ご回答誠にありがとうございました。
「gyou[1024];=1 行のバイト数がそれ以下であれば問題ない」
> とのことで、間違いございませんでしょうか?

お礼日時:2015/03/11 05:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!