0

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

但是我遇到了一个段错误,调试后我看到在我标记第二个字符串之后"\024\002",当打印这个不正确的字符串时,我得到了我的错误。

4

1 回答 1

3

您不能更改字符串文字。

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

上面将strtok尝试data通过写 a 来打破 at 空间'\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 :-) */
}
于 2010-11-14T23:17:35.167 回答