strtok注意事项

问题

最近使用strtok函数分割字符串,代码异常退出,报段错误。
错误代码如下

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

int main(){
    char *a = "ni hao wos s sd"; // 错误做法
    // char a[] = "ni hao wos s sd"; // 正确做法
    char *b = strtok(a," ");
    while(b != NULL){
        printf("TOKEN:%s",b);
        b = strtok(NULL, " ");
    }
    return 0;
}

如果 a变量是一个char * 时,会报错,而将a改成数组,就不会报错。

原因是 strtok 会修改参数,使用gdb调试,可以看到strtok会在原始字符中插入’\0’。

(gdb) p a
$5 = "ni\000hao\000wos s sd"

char *a = “ni hao wos s sd”; 指向常量,不能修改。
而 char a[] = “ni hao wos s sd”; 是将字符常量拷贝到栈里面,是可以修改内容的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章