0

このコードのエラーは何ですか?私はC言語の初心者です。

#define FNAME         "c:\\users\\mahmud\\desktop\\CDs\\"
#define READ_BIN      "rb"

static void open_existing_list()
{
char name[11];
FILE *fptr;

printf("\nPlease enter list name: ");
fflush(stdin);
scanf("%s", name);

fptr = fopen(FNAME name ".dat", READ_BIN);
}

このコードは、ユーザーからファイル名を読み取り、このファイルを開くために使用されます。

 D:\Mhmud\Mahmud\Programming\C\Videos\VTC - C  Programming\Course_Project\main.c In function `open_existing_list': 
75 D:\Mhmud\Mahmud\Programming\C\Videos\VTC - C  Programming\Course_Project\main.c syntax error before "name" 
 D:\Mhmud\Mahmud\Programming\C\Videos\VTC - C  Programming\Course_Project\Makefile.win [Build Error]  [main.o] Error 1 
4

3 に答える 3

4
#define FNAME         "c:\\users\\mahmud\\desktop\\CDs\\
                                                        ^
You're missing the ending quotation mark here: ---------+

(編集:それは単なるコピー&ペーストのタイプミスだったようです。)

不足している見積もりを追加し、これも修正します。

fptr = fopen(FNAME name ".dat", READ_BIN);

連結はコンパイル時に発生するため、これは文字列リテラルに対してのみ機能します。あなたはこのようなものを書きたいです:

char fname[512];
snprintf(fname, sizeof(fname), "%s%s.dat", FNAME, name);
fptr = fopen(fname, READ_BIN);
于 2012-09-06T14:44:37.970 に答える
3

FNAME文字列リテラル(マクロ展開)を変数と連結することはできません。

変数を含む文字列を連結するには、さらに多くの作業を行う必要があります。関数を検索するstrcat()、またはsnprintf()。後者の方が優れています。

于 2012-09-06T14:44:12.703 に答える
2
fptr = fopen(FNAME name ".dat", READ_BIN);

そのような文字列リテラルのみを連結できname、文字列リテラルではありません。sprintfまたはを使用strcatしてパスを構築します。

char path[LENGTH];
snprintf(path, sizeof(path), "%s%s.dat", FNAME, name);
于 2012-09-06T14:44:04.233 に答える