我正在尝试用多个空格标记一个字符串。例如,"yes___no"
,其中下划线是空格。使用strtok(string, " ");
但是我收到了一个seg错误,经过调试后我看到我将第二个字符串标记为"\024\002"
后,当打印出这个错误的字符串时,我得到了错误。
答案 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 :-) */
}