почему в Сях программа заканчивает работу когда идет команда fprintf?

Robert08

новый файл нормально создается,
f=fopen(name,"a+");// или w, или a
после этого выполняются любые команды до
fprinf(f,"...........");
как только доходит до этой строчки все, конец программы и ничего в файл name не записывается
хотя до этого считывает из файла нормально.
что делать?

gopnik1994

видимо выполняет недопустимую операцию...
AV какой нибудь или IO error

Julie16

Глупый вопрос: а ты f на 0 проверял?

Robert08

AV какой нибудь или IO error
что это?
да, сделала некоторые изменения, стало появляться окно "обнаружена ошибка....."
2 ПЖ
да, проверяю, не NULL вроде

Julie16

Покажи весь код. Или как минимум строчку с fprintf, и все типы ее операндов.

evgen5555


int nRes = fprintf(...);
if(FAILED(nRes
{
blablabla;
}
else
fflush
Это так, устоявшаяся практика, чтоб мозги не ебать по полдня.

Robert08

  
FILE * f;
............
iff=fopen(name,"a+"==NULL)
{
.............
return 1;
}
........................
fprintf(f,"............."); // вот тут все и заканчивается
fclose(f);

yolki

ЧТО У fprintf В КАВЫЧКАХ?!
Мы ж не телепаты..

deestr

return 1;
А это что?
Может на этом все заканчивается?

ray144

Ну фсё!
Пока не приведёт достаточно полный кусок кода, я обедать не пойду!

Robert08

в кавычках просто строка - набор символов
перед return 1; стоит printf и на всякий случай scanf
сделала, как Асет написал, только без FAILED И без else - работает один раз, второй раз (как раз когда надо) - нет, зараза
перед вторым разом, понятно, кое-что считается

yolki

Типичный пример, когда у тебя выдаст AV:
fprintf(fp,"%d");
При этом забить ещё на все варнинги, что даёт компилятор - ваще зашибись будет

ava3443

> в кавычках просто строка - набор символов
так покажи её, раз народ так просит! или там что-то неприличное/нецензурное?

Julie16

Если ты хочешь чтобы тебе помогли, то пиши код. Тут нет ясновидящих. Может у тебя там ошибка гораздо раньше(например испортился стек а вылезло только сейчас.

Marinavo_0507

Программист Вася писал программы на Дельфи. При компиляции он никогда не обращал внимания на хинты и ворнинги. Вася выделял память только тогда, когда возникал аксесс виолэйшын. Если указатель при инициализации случайно указывал на уже выделенную область памяти, то память Вася не выделял.

yolki

Я хоть и Вася, хоть и пишу на Delphi - указателями вообще не пользуюсь
И у меня нет хинтов и варнингов - и не потому, что я отключил их показ

Marinavo_0507

Ну я и не про тебя

rosali

fprintf(fp,"%d");
Да не будет тут ничего особенного, ну распечатает адрес возврата вот если
 fprintf(fp,"%s"); 
тогда другое дело, будет конец строки искать и может не найти

bleyman

>ну распечатает адрес возврата
Мне всегда казалось, что leave (или соответсвующий набор команд) вызывается в функции. Ну то есть я точно не помню, но так может быть.

Dasar

> Мне всегда казалось, что leave (или соответсвующий набор команд) вызывается в функции
в си вызывающая функция очищает аргументы в стеке - соответственно код очистки знает сколько реальных параметров было передано - и проблем со стеком нет.
Оставить комментарий
Имя или ник:
Комментарий: