字符窜分割strtok错误(字符串坑点)
程序员文章站
2022-04-14 08:18:56
...
函数include<string.h>
char * strtok(char * str, const * delim);
- 参数: str为带分割字符串, delim为分割字符串
- 功能将str以delim作为分割符分割字符串
错误
当分割类似char * a = "sdhf, kjs, df"
定义的字符串时会segment fault.
例子如下:
#include<string.h>
#include<stdio.h>
int main(int argc, char ** argv)
{
char * a = "hello the world";
char * p;
p = strtok(a, " ");
while(p!=NULL)
{
printf("%s\n", p);
p = strtok(NULL, " ");
}
return 0;
}
使用gdb调试显示最后出错信息
提示是在p = strtok(a, " ");
这里出错了。
把a的定义变成char a[] = "hello the world"之后
#include<string.h>
#include<stdio.h>
int main(int argc, char ** argv)
{
char * a = "hello the world";
char * p;
p = strtok(a, " ");
while(p!=NULL)
{
printf("%s\n", p);
p = strtok(NULL, " ");
}
return 0;
}
编译运行没有错误。
原因分析
个人理解是因为char * a = "hsfk"定义的变量是没有存储在内存栈中的,而是只有一个指针指向字符常量部分,等于是没有给每个字符分配实际的进程内存,所以定义后不能对a[i]进行操作,故调用strtok也会出错。
上一篇: SQL Server分割字符串函数!
推荐阅读