LINUX.ORG.RU

Обработка строки


0

0

Подскажите пожалуйста, где копать. Вот код функции char *cutstr(char *s, const char *sdel) { char *pt;

while (pt = strstr(s, sdel)) { memmove(pt, pt + strlen(sdel), strlen(s) - (pt + strlen(sdel) - s) + 1);

return (s); } Собственно сама функция должна удалять достроку sdel из строки s. Но она падает с segmentation fault :(. Может кто знает в чем дело или как он выходил из данной ситуации. Заранее спасибо.

anonymous

так ты небось функцию вызываешь - cutstr("blah-blah-blah", "ah"), вот она и падает.

ananas ★★★★★
()

Вот пример вызывающего кода. При вызове cutstr :( падает собака.<br> char *trying = (char*) malloc(sizeof(char) * 255);<br> trying = "FreeBSD Linux SunOS OpenBSD NetBSD";<br> cutstr(trying, "NetBSD");<br> printf("%s\n", trying);<br>

anonymous
()

[victor@31337 victor]$ uname -a
Linux 31337 2.4.18 #7 Пнд Апр 15 17:13:11 EEST 2002 i686 unknown
[victor@31337 victor]$ ./test
tt
[victor@31337 victor]$ cat test.c
#include <stdio.h>
#include <string.h>

char *
cutstr (char *s, const char *sdel)
{
char *pt;

while ((pt = (char *) strstr (s, sdel)) != NULL)
{
memmove (pt, pt + strlen (sdel),
strlen (s) - (pt + strlen (sdel) - s) + 1);
}
return s;
}

int
main ()
{
char *p;

p = (char *) malloc (20);
strcpy (p, "test");
printf ("%s\n", cutstr (p, "es"));
free (p);
}
[victor@31337 victor]$

вроде все работает

ananas ★★★★★
()

только сечас заметил, ты загляни дебугером, что у тебя в trying после присвоения, сразу многое прояснится :)

ananas ★★★★★
()

Был бы очень благодарен, если бы ты вкратце рассказал как этим дебагером пользоваться, а то сколько писал, постоянно assert.h или обычную распечатку приходилось использовать. Хотя бы как вывести значение trying?

anonymous
()

2ananas (*) (2002-04-17 19:42:18.023):
> ты загляни дебугером, что у тебя в trying после присвоения, сразу многое прояснится :)
Не понял - а что должно проясниться?

2anonymous (*) (2002-04-16 18:05:51.405):

> char *trying = (char*) malloc(sizeof(char) *255);
> trying = "FreeBSD Linux SunOS OpenBSD NetBSD";
Это - нонсенс, первой строкой ты выделяешь память, а во второй ты ее теряешь,
зафутболивая trying указателем на константную строку.

Вместо trying = "..." надо strcpy(trying,"...");

Die-Hard ★★★★★
()

Огромное спасибо.

anonymous
()
11 октября 2002 г.

gnomemeeting требует хедеры PTlib`s. где ее достать?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.