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不是字符串文字。使用sprintfstrcat来构建你的路径。

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