2012-09-06 2 views
0

이 코드의 오류는 무엇입니까? 나는 C 언어로 막 새로 생겼다.파일 이름에 fopen 오류가 발생했습니다.

#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 리터럴 문자열이 아닌. 경로를 구성하려면 sprintf 또는 strcat을 사용하십시오.

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

당신은 변수 문자열 리터럴합니다 (FNAME 매크로 확장)를 연결할 수 없습니다.

변수와 관련된 문자열을 연결하려면 더 많은 작업이 필요합니다. strcat() 함수 또는 snprintf() 함수를 찾습니다. 후자가 더 좋습니다.

관련 문제