プロが教えるわが家の防犯対策術!

c言語プログラミングを実行しようとすると、
エラーが出て次のようなメッセージが出てしまいました。
「「7行目」で記述エラーを発見しました。「constant expression」を付け忘れています。」

どなたか原因を教えてください。よろしくお願いいたします。

以下が失敗したプログラムです。
#include <stdio.h>

int main(int argc, const char * argv[]) {
const char FILENAME[] = "/Users/user/Desktop/date3.txt";
const int LEN = 100;
char line [LEN];
char name [LEN];
char birth [LEN];
char address [LEN];
FILE *dat;


dat = fopen(FILENAME, "r");
if ( dat == NULL ) {
printf(" ファイル %s がオープンできません. ", FILENAME);
return -1;
}
while( fgets( line, LEN, dat) != NULL ) {
sscanf( line "%s, %s, %s", name ,birth, address );
printf("name = %s, address = %s\n", name, address );
}
fclose(dat);


return 0;
}

A 回答 (3件)

実行時エラーではなく、コンパイル時のエラーですね。



とりあえず環境(OSやコンパイラ)くらいは書きましょう。

現状で思いつくのはコンパイラが
自動変数の配列の要素数に定数以外を書くことに対応してないのではないかと思います。

char line[LEN /* ここが変数はダメ */];

GNU CコンパイラやC99対応のCコンパイラなら大丈夫なのですが。
    • good
    • 3
この回答へのお礼

ありがとうございます。
情報不足で失礼しました。
OSはwindows7でコンパイラは学習用C言語開発環境のEasyIDECです。
Macパソコンのxcodoでやりなおしてみようと思います。

お礼日時:2012/02/05 14:28

他の方も答えられていますが、Cでは変数を配列宣言の要素数に使えないので


そういうふうにしたい場合はdefineを使うのが通例です。
    • good
    • 4
この回答へのお礼

ありがとうございます。
もうちょっと勉強して今後はdefineを使うようにします。

お礼日時:2012/02/05 23:42

>const int LEN = 100;


これはCでは変更のできない変数を表します。
>char line [LEN];
[]内は定数式が必要です。LENは上の定義で変数になっているのでエラーになります。
上の説明はC99以前の話です。

C99以後は「char line [LEN];」を変数で定義できるのでエラーになりません。

C++では「const int LEN = 100;」は定数になるのでコンパイルできます。
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2012/02/05 23:39

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