Форум: "Прочее";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизС, что ему тут не нравится? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c