Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

С, что ему тут не нравится?   Найти похожие ветки 

 
ArtemESC ©   (2006-11-10 20:44) [0]

Должен вроде вывести hey!, а вместо этого Abnormal Program Termination, если верить отладчику - то все ок...

char *addchar(char *s, char ch)
{
s = (char *) realloc(s, strlen(s) + 2);
char *p = s;
while (*(s++));
*(s - 1) = ch;
*s = "\0";
return p;
}

int main()
{
char *s = "hey";
char *p = addchar(s, "!");
printf("%s \n", p);
return 0;
}


 
Ketmar ©   (2006-11-10 20:46) [1]

попытался скомпилировать при помощи dcc32.exe. не смог. код неверный!


 
ArtemESC ©   (2006-11-10 20:50) [2]

>>Ketmar ©   (10.11.06 20:46) [1]
Еще нужно три библии добавить:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


 
Ketmar ©   (2006-11-10 20:54) [3]

добавил. ругается.
(1) Error: Constant expression expected
(2) Error: Constant expression expected
(3) Error: Constant expression expected
(23) Error: "." expected but end of file found


 
Celades   (2006-11-10 20:54) [4]


> ArtemESC ©

У тебя строковой литерал "hey" в константной облачти памяти. Зачем ты потом reallloc делаешь, не понятно. Ты просто губишь память.
Есть такое правили, что если в программе есть хоть один realloc, то должен быть хотя бы один malloc и один free. У тебя же явно не так.
Читай книжки и учи теорию.


 
guav ©   (2006-11-10 20:56) [5]

> [1] Ketmar ©   (10.11.06 20:46)
> попытался скомпилировать при помощи dcc32.exe. не смог.
> код неверный!

Зачем пытался, неужели сразу не видно что код неверный ? Как вообще код может начинатся с идентификатора и состоять исклчиельно из идентификаторов, между некоторыми даже операторов нет ?


 
Ketmar ©   (2006-11-10 20:58) [6]

>[5] guav(c) 10-Nov-2006, 20:56
>Зачем пытался, неужели сразу не видно что код неверный ?
а вдруг это хитрые недокументированые фичи?


 
Zz_   (2006-11-10 20:58) [7]

Вот это

терминатор посылаем лесом...
s = (char *) realloc(s, strlen(s) + 2);

а тут думаем что он есть...
while (*(s++));


 
Ketmar ©   (2006-11-10 21:04) [8]

>[7] Zz_ 10-Nov-2006, 20:58
>а тут думаем что он есть...
>while (*(s++));
и таки есть, афаир: realloc чистит нововыделеную память.


 
ArtemESC ©   (2006-11-10 21:24) [9]

Celades   (10.11.06 20:54) [4]
Но вроде бы s - это переменная, а не константа... Realloc использую, чтобы увеличить размер строки на один символ...

Есть такое правили, что если в программе есть хоть один realloc, то должен быть хотя бы один malloc и один free
 Так откуда ж я их возьму? Они мне просто не нужны здесь..

guav ©   (10.11.06 20:56) [5]
 Вообще-то, код верный... Аргументации минус...

Ну так как все таки правильно? Нужна просто функция, которая добавляет один символ к строке...


 
Vga ©   (2006-11-10 21:33) [10]


> [9] ArtemESC ©   (10.11.06 21:24)

strcat чем не подходит?


 
Celades   (2006-11-10 21:49) [11]


> ArtemESC ©   (10.11.06 21:24) [9]
> Celades   (10.11.06 20:54) [4]
> Но вроде бы s - это переменная, а не константа... Realloc
> использую, чтобы увеличить размер строки на один символ.
> ..

s переменная, а память на которую она указывает константная. И ты её хочешь увеличить, что в принципе невозможно. Сделай malloc, туда скопируй строку, уже её и увеличивай. Потом не забудь сделать free.


 
ArtemESC ©   (2006-11-10 21:55) [12]

Vga ©   (10.11.06 21:33) [10]
Аргументы-строки...

Celades   (10.11.06 21:49) [11]
Thanks, наверное так и сделаю...



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
15-1163258853
тайный агент
2006-11-11 18:27
2006.12.03
Попасть на другой комп


2-1163538426
kaver
2006-11-15 00:07
2006.12.03
TPanel и компоненты


4-1153379764
Misha Uskov
2006-07-20 11:16
2006.12.03
Описание сервиса


1-1161243221
Varf
2006-10-19 11:33
2006.12.03
Проблемы с Excell в D7 срочно


15-1163749228
TohaNik
2006-11-17 10:40
2006.12.03
Вот они, те кто влияет на неокрепшие души.