0

可能重复:
strtok 给出分段错误

我尝试使用 strtok 函数将字符串拆分为多个标记,但在此示例中,它返回了一个 seg。故障错误。我哪里错了??

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

int main(int argc, char** argv){
    int i=0;
    char * string = "HI:HOW:ARE:YOU:?", *tmp;

    while(1){
        if(i==0) tmp=strtok(string,":");
        else tmp=strtok(NULL,":");
        if(tmp==NULL) break;
        printf("%s\n",tmp);
        i++;
    }
    return 1;
}
4

1 回答 1

3

改变

char * string = "HI:HOW:ARE:YOU:?"

为了

char string [] = "HI:HOW:ARE:YOU:?"

使用 char string [] 你有一个数组,而 char * 你有一个指针。当你声明一个数组时,它会请求空间来分配你的字符串的大小。char * 字符串创建一个指向文字字符串的指针。

char *string 的问题在于不应更改该点,因为字符串文字通常存储在只读内存中,从而导致未定义的行为 33

(有关更多详细信息,请阅读此https://www.securecoding.cert.org/confluence/display/seccode/STR30-C.+Do+not+attempt+to+modify+string+literals

因此,由于使用strtok字符串的内容被修改并分解为更小的字符串(令牌),所以您遇到了问题。

于 2012-11-03T11:54:23.120 回答