nixp.ru v3.0

22 октября 2017,
воскресенье,
16:52:34 MSK

DevOps с компанией «Флант»
Antern написал 30 декабря 2006 года в 00:50 (575 просмотров) Ведет себя как мужчина; открыл 20 тем в форуме, оставил 84 комментария на сайте.

не могу придумать более походящей темы, НО проблема такова:

Техническая часть олимпиадной задачи. Язык как выше написано Си. Проблема в том, что код компилится без ошибок и предупреждений на gcc во FreeBSD_6.0релиз. Но при попытке ./a.out пишет далеко не указываемую t_out строку, а ошибку:

Bus error (core dumped)

И на этом всё прекращается.

Есть файл0 с входными данными «psycho.in».

Вот код:

#include

#include

char *razdel(char *stroka,int two)

{

char *st1,*st2,*nll=«\0»,*spc=» »;

int flag,i,last;/*

0 = write to st1

1 = write to st2

2 = end of «stroka»

*/

for (i=0;i

if(strcmp((stroka+i),nll))flag=1;

if(strcmp((stroka+i),spc))flag=2;

switch(flag){

case(0):strcpy((st1+i),(stroka+i));last=i;break;

case(1):strcpy((st2+i-last),(stroka+i));break;

case(2):break;

};

};

if(two)return st2;

else return st1;

};

int main()

{

char *ifile=«psycho.in»,*ofile=«psycho.out»;

char *buffer,*t_out;

int usr,not;

FILE *str;

str=fopen(ifile,«r»);

buffer=fgets(buffer,15,str);

str=freopen(ofile,«w»,str);

t_out=razdel(buffer,1);

fputs(t_out,str);

fclose(str);

};

Помогите плиз) учень нужно.

Uncle Theodore

Твоя функция возвращает поинтер на локальную переменную (st1, st2), которая не существует, после того, как функция вышла. Соответственно, выводится тот мусор, который теперь по этому адресу находится.

Good Luck,

UT

Antern

попробовал объявить st1 и st2 как extern. Пишет:

[Linker error] undefined reference to `st1\′

и тоже самое про st2 :’-(

сенкс. буду думать

Antern

сори за тупость)

fscanf(«%d %d»,&usr,&not);

printf(«%d»,usr);

printf(«\n%d»,not);

Uncle Theodore
Antern
попробовал объявить st1 и st2 как extern. Пишет:

[Linker error] undefined reference to `st1\′

и тоже самое про st2 :’-(

сенкс. буду думать

<шопотом>

А ты их глобальными сделай. Экстерн — это из другой оперы…

</шопотом>

Antern
Uncle Theodore
<шопотом>

А ты их глобальными сделай. Экстерн — это из другой оперы…

</шопотом>

а на это gcc на фре пишет тож самое «Bus error(core dumped).

пробовал из винды в Dev-C++. компилит, но при вызове бинарика врубает дебагер :-), который с нет_студией идет.

наверно за мной КГБ следит…

Uncle Theodore
Antern
а на это gcc на фре пишет тож самое «Bus error(core dumped).

пробовал из винды в Dev-C++. компилит, но при вызове бинарика врубает дебагер :-), который с нет_студией идет.

наверно за мной КГБ следит…

Видимо из другого места сифонит.

У тебя дебаггер хороший есть? valgrind, например?

Я попозже тоже могу глянуть, не сейчас…

Good Luck,

UT

Antern

из сегодняшнего проганья я понял, что ночью надо спать или не спать, но по другим поводам

Code Monkey

case(0):strcpy((st1+i),(stroka+i));last=i;break;

case(1):strcpy((st2+i-last),(stroka+i));break;

у тебя st1 и st2 ни на что не ссылаются. т.е. вполне реален вариант, что ты копируешь строки хрен знает куда.

Antern

ух.. разобрался кое-как) сенкс