

#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が超えたとしても特に問題はなさそうです!
このプログラムは動いていますのでは正常です。
私の
考え方としまして、何か誤りがありますでしょうか?
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
> さて、char gyou[1024];でcharの表現範囲は-128~127間ですが、
> gyou[1024]の[1024]とは関係はありますでしょうか!?
ない。
1024 のほうはただ単に領域の個数を表しているだけで、読み込もうとするファイルの 1 行のバイト数がこれを超えない限り別に 1000 でも 3327 でも構わない(ある程度以上大きくなると別の問題が出てくるが)。
ただ単に 1024 = 2^10 でプログラマにはよく見る数字、かつ、普通のテキストなら 1 行が収まりそうな長さなだけ。
ご回答まことにありがとうございました^^
ない。とのご回答から・・・以下は構文に含まれる意味を他スレから引用しました。
肝心の配列ですが・・・
gyou char[1024];
これの意味は
「符号付き1バイトが1024個並んだ領域を確保し、先頭をgyouと言う名前で参照します」
ので gyou[0] だろうが gyou[100] だろうが1バイトなのです
添字は0から始まるのでこの場合のMAXは1023ですな
以上で間違いないと思います。
これは、今後、どなたかの参考になると思い掲示しました。
私もよく読んで理解を深めたいと存じます。
No.3
- 回答日時:
うーん、文の区切りがおかしいかな。
char型の/配列変数を宣言、じゃなくって、char型の配列/変数を宣言、ですね。さらに語を補うなら
char型の配列で変数を宣言というところです。
……というか、普通の初心者向け参考書ならここに来るまでの間に配列での変数宣言について書いてあると思うのですが……ひょっとして飛ばし読みとかしてます?
No.2
- 回答日時:
> 「gyou[1024];=1 行のバイト数がそれ以下であれば問題ない」
> とのことで、間違いございませんでしょうか?
そのとおり。ただし、これはこの答を得るだけで満足しないこと。
実際に一行が1024バイトを超えるテキストファイルを読み込ませて、何が起こるかを確認すること。
大丈夫、あなたが思っていないだろう結果になるだけで、実行時エラーになることはないはずだ。
なぜそうなったかがわからなければ fgets() の第二引数の意味を調べること。
以下ご回答誠にありがとうございました。
「gyou[1024];=1 行のバイト数がそれ以下であれば問題ない」
> とのことで、間違いございませんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
char型配列をint型に代入するには
-
c言語
-
配列の要素数に変数を入れたい...
-
C言語の2次元配列 容量が大き...
-
関数のプロトタイプ宣言
-
順不同の問題の結果について
-
C言語の課題が出たのですが自力...
-
C言語 ファイルの指定された行...
-
万年カレンダーについて。
-
配列要素の値の入れ替え
-
コンボボックスでデフォルト値...
-
IPアドレスを配列に代入する方法。
-
ループカウンタを使用せず、配...
-
[C++/CLI]マネージコードで配列...
-
C言語において、 配列要素をひ...
-
char gyou[1024];でcharの表現...
-
bmpやImageの配列を関数の引数...
-
C#でのフィボナッチ数列
-
ヒストグラムのプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
C言語 ファイルの指定された行...
-
C言語において、 配列要素をひ...
-
C言語の課題が出たのですが自力...
-
C#で配列が空かを判定するには?
-
構造体のextern方法
-
C言語の配列のコピーについて
-
c言語 構造体
-
C言語 数値の連続入力について
-
MFC - ダイアログボックスのPic...
-
C++DLLからC#へのコールバック...
-
配列のアドレス部
-
要素数・要素の値が未定の配列...
-
C言語についてです 5人のテスト...
-
.NET C++で、構造体の配列をnew...
-
2番目の最大値を求める
おすすめ情報
ご回答誠にありがとうございました。
申し訳ございません、再度の質問ですが、
「gyou[1024];=1 行のバイト数がそれ以下であれば問題ない」
とのことで、間違いございませんでしょうか?
よろしくお願いいたします。
補足ばかりで申し訳ございません_ _
参考書にあるのですが、Char gyou [1024];の説明に
「ストリームからデータを読み込むためのchar型の”配列変数を宣言”しました。
読み込み単位は行単位で行いますので、goyuという名前にしました。」
とあります。ここでいう、「配列変数を宣言」とありますが何のことだかわか
りません?補足ばかりでお手数をおかけしておりますが、
よろしくお願いいたします。
温故知新ですが、参考書をよく読むと
「配列宣言」のことが書いてありました。
複数の値を持つことができる変数を、配列とよびます。
今まで使用した変数は、1つの変数に、1つの値だけを記憶できました。配列は
、1つの”配列変数”に複数の値を記憶できるのです。
配列も変数であるため、変数宣言を行います。配列がどのような型の値を記憶できるかは、宣言時の型によります。今回の例の場合は、intで宣言しましたから、ひとつひとひとつの値は、int型になります。宣言時には、[ ]内の値によって”配列要素の数"を指定します。これは”添え字”と呼びます。
以上ですが、以下要点を私なりにまとめました.。
1)複数の値を持つことができる変数を、”配列”
2)配列は1つの配列変数に、複数の値を記憶できる(int A1,A2,A3;をint A[3];とできる^^)
型 変数名 [要素数]