Я искал большинство вопросов 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 и будет распечатывать адрес памяти. У меня есть еще один fopen после printf и в режиме отладки он также работает. Может ли кто-нибудь помочь мне понять, что происходит? Файл есть, права правильные. Это более новая версия кода, но ранее перед некоторыми невоспроизводимыми изменениями работа 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'? –
'sizeof (path)' будет размером указателя, если 'path' имеет тип' char * '. Возможно, вы имели в виду 'strlen (path) + strlen (fname) + 1'. – ctn