Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Программа не работает в отладке.


Автор: Xon 15.3.2009, 00:06
Изучаю Си. 
Мной создан консольный проект С++ в VS6.
Код компилируется без ошибок но при запуске в отладке вылетает сообщение

Debug Assertion failed!
Program:D:\0\___Debug\1.exe
File:fgets.c
Line:60
Expression:str !=NULL

А практически происходит то что fopen возвращает нули
Это в отладке 
а просто запустить прогу из директории то она удачно отрабатывает.

Не могу понять  как вообще запускается программа на исполнение из под VS6.
И как мне её поиметь в отладчике??


Код

/*Программа должна иметь небольшой файл 121.c     
с любым содержимым но строки не должны превышать 199 символов
в той директории где она находится 
программа создаст новый файл в своей директории z.c
и перепишет в него содержимое 121.c  сдвинув его впрао символом табуляции.
*/




#include<stdlib.h>
#include <stdio.h> 
#define BSIZE 200 //задаём СИМВОЛИЧЕСКУЮ переменную которую должен обработать препроцессор\
//она нужна для того чтобы не выставлять каждый раз цифру 200 а вместо нее напишем  BSIZE   \
//и если надо будет сменить цифру по всей программе то мы её просто сменим тут.
int main()

char buf[BSIZE]; //создаём обычный статический массив на 200 элементов
FILE *in, *out;  //обьявляем указатели на файлы
 
in=fopen("121.c","rb");// откроем сущесвующий файл для чтения из него
out=fopen("z.c","wb"); // создадим и откроем новый файл для записи в него


buf[0]='\t';           // впишем в нулевой элемент символ табуляции он всё время будет там 
                       //и сдвинет все строки влево в файле записи

while(fgets(buf+1,BSIZE-1,in) != NULL)// в цикле переписываем из одного файла в другой
fputs(buf,out); //
fclose(in); //
fclose(out); //
system("PAUSE");  //не дадим закрыться окну
return 0; 




Автор: pan2004 15.3.2009, 00:14
файлов нет там где она ищет, вот и не работает.
Рабочие каталоги могут отличаться при запуске программы из студии и из консоли.

Автор: zim22 15.3.2009, 09:16
 smile 
Xon, комментарии у тебя в программе - жесть!

Код

int x = 0; // создаём целочисленную переменную с именем икс, инициализированную нулём.
int y = x; // создаём целочисленную переменную y, инициализируя её значением икс. после инициализации переменная y будет содержать значение икс.
int *s = new int(10); // создаём обычный указатель по имени ЭС, которому будет передан адрес из динамической памяти, возвращённый оператором new.


Автор: andrew_121 15.3.2009, 10:51
zim22,  smile  smile 

Автор: Xon 16.3.2009, 00:31
Да... Похоже что нет сдесь программистов 
писавших программы работающие с файлами...
Или они в отладчике не работают?...

Автор: C/L 16.3.2009, 01:55
Цитата(Xon @  16.3.2009,  02:31 Найти цитируемый пост)
Да... Похоже что нет сдесь программистов писавших программы работающие с файлами...

 smile  smile 

вот же ответ:

Цитата(pan2004 @  15.3.2009,  02:14 Найти цитируемый пост)
файлов нет там где она ищет, вот и не работает.Рабочие каталоги могут отличаться при запуске программы из студии и из консоли.

Автор: Xon 16.3.2009, 10:18
А вот вопрос:

Цитата

Не могу понять  как вообще запускается программа на исполнение из под VS6.
И как мне её поиметь в отладчике??


Если не в состоянии ответить то хотя бы пошлите куда нибудь
или напишите пример который непременно будет работать в отладке
то что прога в отладке не находит файла так это я с самого начала знал

Цитата

А практически происходит то что fopen возвращает нули
Это в отладке 
а просто запустить прогу из директории то она удачно отрабатывает

для тех кто внимательно читал вопрос.

Автор: mes 16.3.2009, 10:42
Цитата(Xon @  15.3.2009,  23:31 Найти цитируемый пост)
Да... Похоже что нет сдесь программистов 
писавших программы работающие с файлами...

Ага, Вы единственный !

Цитата(Xon @  16.3.2009,  09:18 Найти цитируемый пост)
для тех кто внимательно читал вопрос. 

для тех кто невнимательно читал ответ, процитирую eще раз:

Цитата(C/L @  16.3.2009,  00:55 Найти цитируемый пост)

Цитата(pan2004 @  14.3.2009,  23:14 Найти цитируемый пост)
файлов нет там где она ищет, вот и не работает.
Рабочие каталоги могут отличаться при запуске программы из студии и из консоли



Цитата(Xon @  16.3.2009,  09:18 Найти цитируемый пост)
Если не в состоянии ответить то хотя бы пошлите куда нибудь

Если кто не в состоянии понять, уточню: надо задать рабочий каталог, тот в котором у Вас созданы файлы.

P.S. если хотите, чтоб к Вам относились с уважением, старайтесь вести себя достойно, а не вызывающе грубить.

Автор: Anikmar 16.3.2009, 10:51
Цитата(Xon @  16.3.2009,  10:18 Найти цитируемый пост)
Если не в состоянии ответить то хотя бы пошлите куда нибудь

Будете грубить - точно пошлют  smile 

Как вариант - чтобы работало и в релизе и в отладчике при открытии файлов задайте им какой-нибудь абсалютный путь, например:
c:\111\Test.txt



Автор: zim22 16.3.2009, 10:56
Цитата(Anikmar @  16.3.2009,  10:51 Найти цитируемый пост)
задайте им какой-нибудь абсалютный пут

или функцию main описать так:
Код

int main(int argc, char *argv[])

и потом указывать имя файла непосредственно из командной строки.

Автор: Anikmar 16.3.2009, 11:24
Цитата

или функцию main описать так:
код C++
1:
int main(int argc, char *argv[])

и потом указывать имя файла непосредственно из командной строки. 


Ага, а потом автор темы скажет, что здесь нет программистов, которые умеют работать с командной строкой.
Ему же придется параметры в среде прописывать  smile 

Автор: zim22 16.3.2009, 11:32
 smile 
Цитата(Anikmar @  16.3.2009,  11:24 Найти цитируемый пост)
Ему же придется параметры в среде прописывать

А что такое среда? А что такое консоль? А где я нахожусь? Вокруг нету ни одного программиста... Одни люди в белых халатах. Они точно не программисты. Сейчас подойду и спрошу у них, умеют ли они дебажить в нулевом кольце! Аййййй, не засовывайте мне эти таблетки в рот! Не колите меня этими уколами. Я Форумчанин! Не имеете права!  smile 

Автор: Xon 16.3.2009, 11:57
Кстати с принудительно прописанным путём таже беда

наверное проблема с настройкам VS а может ещё что нибудь
Мне уже неудобно просить кого нибудь утруждать себя
прокрутить это код у себя в VS .


Спасибо всем весёлым и злобным кто попытался помочь 

прошу тему считать  закрытой

Автор: zim22 16.3.2009, 12:32
Xon, добавь эту строчку в программу и потом кинь файл 121.с в ту же директорию
Код

printf("%s\n", __FILE__);

Автор: Dmi3ev 16.3.2009, 13:19
 smile 
Цитата

#define BSIZE 200 //задаём СИМВОЛИЧЕСКУЮ переменную которую должен обработать препроцессор\
//она нужна для того чтобы не выставлять каждый раз цифру 200 а вместо нее напишем  BSIZE   \
//и если надо будет сменить цифру по всей программе то мы её просто сменим тут.

я себе это скопировал на память после того, как оборжался...  smile 
Цитата

fputs(buf,out); //
fclose(in); //
fclose(out); //

муза покинула, решил пропустить...  smile правильно, спешить не надо, надо найти нужные слова, 
чтобы кратко и понятно (как в случае с #define BSIZE 200) описать суть данных строк... полностью согласен...  smile 
муза вернулась   smile 
Цитата

system("PAUSE");  //не дадим закрыться окну

PS
Цитата

buf[0]='\t';           // впишем в нулевой элемент символ табуляции он всё время будет там 
                       //и сдвинет все строки влево в файле записи

это тоже корка...  smile 

Автор: Dmi3ev 16.3.2009, 13:55
Так зацените, вот мой вариант комментов для Xon 
Код

#include<stdlib.h>//Подключил я хидер-файл, но неправильно... Подправил!
#include <stdio.h>//Подключил еще попозже. Код растет, ну прям как дрожжи!
#define BSIZE 200 //Я константу забабахал, Чтоб размер мне мозг не т...хал

int main()//Вот и главная фигня, Это было до меня...
{//Скобку ставлю для начала, Чтоб программа не пищала...
char buf[BSIZE]; // Пригодился мой дефайн, все работает и файн...
FILE *in, *out;  // Указатель объявлю, хотя Си я не люблю...
 
in=fopen("121.c","rb");// Я бинарник открываю, Потом оттуда почитаю...
out=fopen("z.c","wb"); // А сюда буду писать, Но сначала прочитать!!!
buf[0]='\t';// Таб я запишу сюда, Вот такая ерунда...

while(fgets(buf+1,BSIZE-1,in) != NULL)// Тут я цикл запускаю, Все, по ходу отпускает...
fputs(buf,out); // Здесь пожалуй пропущу
fclose(in); // Здесья я тоже не хочу
fclose(out); // Хм.. со следущей начну, а пока пойду взд..ну
system("PAUSE");  //Не дадим окну закрыться, а то мама будет злиться...
return 0;// и ретёрн тут как обычно, вообщем сделал все прилично.
} //Скобку тут чуть не забыл. Но поставил, не ступил...


Автор: Anikmar 16.3.2009, 13:58
Dmi3ev,  smile  smile  smile 

Автор: mes 16.3.2009, 14:10
 smile 
Цитата(Dmi3ev @  16.3.2009,  12:55 Найти цитируемый пост)
;// Я бинарник открываю, Потом оттуда почитаю...
 // А сюда буду писать, Но сначала прочитать!!!

Какой талант пропадает ! Dmi3ev, я думаю ты первооткрыватель этого жанра.. Комменты в стихах я еще не видел. 
Как прославишься не забудь поделиться лаврами с Xon. Ведь это именно он помог найти себя !
 smile  smile  smile 

Автор: Dmi3ev 16.3.2009, 14:13
Цитата

Как прославишься не забудь поделится лаврами с Xon. Ведь это именно он помог найти себя !

 smile  ОК

Добавлено через 6 минут и 9 секунд
Ржачная тема получилась... Думаю Xon оценит. Как гангстер прозы в С++, он заметит воротилу рифмоплетства в С++, иначе не может быть.
Томики с нашими комментами будут расходиться за день...

Автор: mes 16.3.2009, 14:23
Цитата(Dmi3ev @  16.3.2009,  13:13 Найти цитируемый пост)
Ржачная тема получилась... Думаю Xon оценит. Как гангстер прозы в С++, он заметит воротилу рифмоплетства в С++, иначе не может быть.
Томики с нашими комментами будут расходиться за день...


По +1 каждому из "авторов" smile  хоть и оффтопик, a настроение поднялось выше некуда smile 

Автор: Dmi3ev 16.3.2009, 14:32
 smile 
Цитата

По +1 каждому из "авторов" smile  хоть и оффтопик, a настроение поднялось выше некуда smile 

по делу все сказано, можно и поглумиться немного... тем более, что я такой темы еще не видел...
+ к этому - поднять настроение людям - тоже хорошо... 

Автор: Xon 16.3.2009, 14:42
Код

так зацените, вот мой вариант комментов для Xon 
Так зацените, вот мой вариант комментов для Xon 

код C++    
1:    
2:    
3:    
4:    
5:    
6:    
7:    
8:    
9:    
10:    
11:    
12:    
13:    
14:    
15:    
16:    
17:    
18:    
19:    
20:    
#include<stdlib.h>//Подключил я хидер-файл, но неправильно... Подправил!    
#include <stdio.h>//Подключил еще попозже. Код растет, ну прям как дрожжи!    
#define BSIZE 200 //Я константу забабахал, Чтоб размер мне мозг не т...хал    
int main()//Вот и главная фигня, Это было до меня...    
{//Скобку ставлю для начала, Чтоб программа не пищала...    
char buf[BSIZE]; // Пригодился мой дефайн, все работает и файн...    
FILE *in, *out;  // Указатель объявлю, хотя Си я не люблю...    
    
in=fopen("121.c","rb");// Я бинарник открываю, Потом оттуда почитаю...    
out=fopen("z.c","wb"); // А сюда буду писать, Но сначала прочитать!!!    
buf[0]='\t';// Таб я запишу сюда, Вот такая ерунда...    
while(fgets(buf+1,BSIZE-1,in) != NULL)// Тут я цикл запускаю, Все, по ходу отпускает...    
fputs(buf,out); // Здесь пожалуй пропущу    
fclose(in); // Здесья я тоже не хочу    
fclose(out); // Хм.. со следущей начну, а пока пойду взд..ну    
system("PAUSE");  //Не дадим окну закрыться, а то мама будет злиться...    
return 0;// и ретёрн тут как обычно, вообщем сделал все прилично.    
} //Скобку тут чуть не забыл. Но поставил, не ступил...    



Это сообщение отредактировал(а) Dmi3ev - 16.3.2009, 13:57 



--------------------

Могу предположить что ты по жизни носишь очки.

Автор: vinter 16.3.2009, 14:46
Цитата(Xon @  16.3.2009,  15:42 Найти цитируемый пост)
Могу предположить что ты по жизни носишь очки.

 smile  smile  smile 

Автор: bsa 16.3.2009, 15:00

M
bsa
тема себя исчерпала, закрываю во избежание возможных наездов

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)