Токенизируйте символы пробела в C - PullRequest
0 голосов
/ 15 ноября 2010

Я пытаюсь токенизировать строку с несколькими пробелами.Например, "yes___no", где подчеркивания - пробелы.Использование strtok(string, " ");

Но я получаю ошибку сегмента и после отладки вижу, что после токенизации вторая строка - "\024\002", и при печати этой неправильной строки я получаю свою ошибку.

1 Ответ

3 голосов
/ 15 ноября 2010

Вы не можете изменить строковый литерал.

/* does not work */
char *data = "yes no";
strtok(data, " ");

Приведенное выше strtok попытается разбить data в пространстве, написав '\0' там: data[3] = '\0';, но строковые литералы не могут быть изменены. Попробуйте вместо

/* works */
char data[] = "yes no";
strtok(data, " ");

Редактировать: скопировать строковый литерал в массив символов

char *data = "string literal";
/* ... */
char *copy;
size_t datalen = strlen(data) + 1;
copy = malloc(datalen);
if (copy != NULL) {
    strcpy(copy, data);
    /* use copy now ... strtok(copy, " "); ... or whatever you need */
    free(copy);
} else {
    /* no memory. Tell user to upgrade computer :-) */
}
...