LINUX.ORG.RU

strtok


0

0

Чет не могу разобратся как работает) компилится но при запуске проги пишет "Segmentation fault" ... помогите примерчиком?
ps
копмпилю на линуксе RH9

anonymous

char *c;
char *str, *str1, *str2, *str3;

str = "str1;str2;str3";
c = strtok(str, ";");
strcpy(str1, c);
c = strtok(NULL, ";");
strcpy(str2, c);
c = strtok(NULL, ";");
strcpy(str3, c);

UncleAndy ★★★
()

Все равно выскакивает "Segmentation fault"

пишу

#include <string.h>

int main (){

char *c;
char *str, *str1, *str2;

str = "str1/str2";
c = strtok(str, "/");
strcpy(str1, c);
c = strtok(NULL, "/");
strcpy(str2, c);

return 0;
}

компилю

gcc -Wall test.c -o test

что я делаю не так?

anonymous
()

Почему то опять "Segmentation fault" =(
пишу

#include <string.h>

int main(){

char *c;
char *str, *str1, *str2;

str = "str1/str2";
c = strtok(str, "/");
strcpy(str1, c);
c = strtok(NULL, "/");
strcpy(str2, c);

return 0;

}

а компилю так
gcc -Wall test.c -o test

что деалю не так?

anonymous
()

ребят вы вообще в курсе что есть такие вещи как память, сегменты в которые можно писать или которые только для чтения и подобную лабуду?

lg ★★
()

man strtok на предмет

These functions modify their first argument. These functions cannot be used on constant strings.

затем осознаем что str - стековый литерал и изменять его нельзя.

abbr
()

ну вы народ вообще писец) пример то не можете написать то?) я си не особо знаю)

ща сходил и купил умнцю книжку там написан примаер, цытирую:

#include <stdio.h> #include <string.h>

int main(void) { char *p;

p=strtok("Травка зеленеет, солнышко блестит"," "); printf(p);

do { p=strtok(NULL," "); if(p) printf("|%s",p);

}while(p);

return 0; }

чтот тоже не рботает)) напишите плиз рабочий пример?

anonymous
()

мож ест ьдругой способ разбить строку по некому разделителю?)) просто надо строку вида "text1/text2" разделить и получить значения)

anonymous
()

int
main()
{
char *c;
char str[]="str1/str2", *str1, *str2;

str1 = strtok(str, "/");
str2 = strtok(NULL, "/");

printf("str1 = %s, str2 = %s\n", str1, str2);

return 0;
}

lg ★★
()

ну вот другое дело))) спасибо огромное)

anonymous
()

int main (){

char *c; char *str, str1[128], str2[128];

str = "str1/str2"; c = strtok(str, "/"); strcpy(str1, c); c = strtok(NULL, "/"); strcpy(str2, c);

return 0; }

Как минимум - ты забыл память выделить для строковых переменных str1 и str2 и естественно что при попытке сделать в них strcpy выскакивает SegFault.

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