2012-09-06 155 views
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 

回答

3
#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); 
+0

是的,这是错过打字,谢谢。 –

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

只能串联字符串文字这样,和name不是一个字符串文字。使用sprintfstrcat建立您的路径。

char path[LENGTH]; 
snprintf(path, sizeof(path), "%s%s.dat", FNAME, name); 
3

不能连接有可变字符串文字(在FNAME宏扩展)。

要连接涉及变量的字符串,您需要做更多的工作。查找strcat()函数或snprintf()。后者更好。