2012-04-08 2 views
0

У меня есть функция. FA-> file_temp - это копия файла FA->. FA-> file_temp находится в директории TEMP. (C: \ Users \ User \ AppData \ Local \ Temp)perror: Нет такого файла или каталога

stat(FA->file, &st_file); 
filesize = st_file.st_size; 
ffile = fopen(FA->file_temp, "rb"); 
if (ffile == NULL) perror("NULL!!!!!!!!!!!!!1\n"); 

strcpy(str, FA->file_dir); 
strcat(str, "packed"); 
temp_name(str) ; 
strcpy(FA->tmpname , str); 
ftmpname = fopen(FA->tmpname, "wb"); 
if (ftmpname == NULL) perror("NULL!!!!!!!!!!!!!1\n"); 
if (rc = encode(ffile, ftmpname, filesize)!=0) 
    longjmp(Berror, rc); 
+0

В чем вопрос? –

+0

Почему я не получил утверждение? – sleepy

ответ

1

Авось ли ваша программа орать 'NULL!!!!!!!!!!!!' перед assertion failed? В сообщении об утверждении говорится, что fo имеет значение NULL.

В то время как я здесь,

if (rc = encode(ffile, ftmpname, filesize)!=0) 

, вероятно, не то, что вы хотите. Это сохраняет все encode(ffile, ftmpname, filesize)!=0 в rc. Вероятно, вы имели в виду:

if ((rc = encode(ffile, ftmpname, filesize))!=0) 
+0

спасибо, я не заметил. да, perror yell nulll ((и я не знал, почему снова .. – sleepy

+0

@sleepy, помещая присваивание внутри условия 'if' в любом случае является одной из худших идей. Обычная идиома заключается в том, чтобы поставить присвоение перед' if', а затем просто 'if (rc)'. –

Смежные вопросы