나는 웹을 통해 fopen 질문의 대부분을 검색해 보았습니다. fopen으로 파일을 열려고합니다. 아래는 내 코드의 일부입니다.fopen in c는 디버그 모드에서 실행되지 않으면 작동하지 않습니다.
FILE *filep = NULL;
FILE *Compilation = NULL;
printf("%s\n", fname);
char *pfname = (char*)malloc(sizeof(path) + sizeof(fname));
pfname = concat(path, fname);
printf("%s\n", pfname);
filep = fopen(pfname,"r");
if (filep == NULL){
printf("opening file failed: %s\n", strerror(errno));
}
printf("%p\n", filep);
Visual Studio Express 2012를 내 IDE로 사용하고 있습니다. 디버그없이 이것을 실행할 때. 연결된 pfname을 인쇄 한 후 충돌이 발생합니다. 그러나 이것을 디버그 모드로 실행하면 작동합니다. filep은 NULL을 반환하지 않으며 메모리 주소를 인쇄합니다. 나는 printf 다음에 또 다른 fopen을 가지고 디버그 모드에서도 작동한다. 아무도 내가 무슨 일이 일어나는지 이해하도록 도와 줄 수 있습니까? 그 파일은 거기에 있습니다, 권한은 옳습니다. 이것은 코드의 새로운 개정이지만 일부 변경되지 않은 변경 사항이 있기 전에는 fopen이 작동했습니다. 미리 감사드립니다.
는 포인터를 인쇄하지 않기 때문에 여전히 과거 fopen을 얻을되지 수
FILE *filep = NULL;
FILE *Compilation = NULL;
printf("%s\n", fname);
char *pfname = (char*)malloc(strlen(path) + strlen(fname) + 1);
pfname = concat(path, fname);
printf("%s\n", pfname);
filep = fopen(pfname,"r");
if (filep == NULL){
printf("opening file failed: %s\n", strerror(errno));
}
printf("%p\n", filep);
char *newfile = (char*)malloc(strlen(path) + 11);
newfile = concat(path, "Result.txt");
Compilation = fopen(newfile, "a");
수정 된 코드입니다.
우리가'concat()'코드를 보여줍니다. – ctn
'fname'과'path'에 대한 값은 어디에서 얻을 수 있습니까? –
'path'의 타입이'char *'인 경우'sizeof (path)'는 포인터의 크기가됩니다. 아마도'strlen (path) + strlen (fname) + 1'을 의미했을 것입니다. – ctn