在C中标记空白字符

时间:2010-11-14 23:08:44

标签: c tokenize strtok

我正在尝试用多个空格标记一个字符串。例如,"yes___no",其中下划线是空格。使用strtok(string, " ");

但是我收到了一个seg错误,经过调试后我看到我将第二个字符串标记为"\024\002"后,当打印出这个错误的字符串时,我得到了错误。

1 个答案:

答案 0 :(得分:3)

您无法更改字符串文字。

/* 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 :-) */
}