strtok() - 分段错误

时间:2012-11-03 11:43:28

标签: segmentation-fault strtok

  

可能重复:
  strtok giving Segmentation Fault

我尝试使用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;
}

1 个答案:

答案 0 :(得分:3)

更改

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

代表

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

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

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

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

因此,由于使用 strtok ,字符串的内容被修改并分解为较小的字符串(标记),您会遇到问题。