strtok()出现segment fault的错误

Posted homeoflowell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strtok()出现segment fault的错误相关的知识,希望对你有一定的参考价值。

在写一个简易的 shell 时,需要将命令行的命令通过空格分割成一个个字符串参数,这里我使用了 strtok() 函数,然后遇到了 segment fault 的错误。

出现问题的代码如下:
技术图片

终于寻找到原因:

strtok(char* string, char* delim)函数的实现逻辑是
函数是在s中查找包含在delim中的字符并用NULL(’/0′)来替换,直到找遍整个字符串,也就是说在这个过程中需要对原来的字符串进行写操作。

这样错误原因就明显了!

上述代码中 mysys() 函数传入的是一个字符串常量,而在 C 语言中字符串常量在编译时就被存储在静态存储区,因而是不能更改的,也即不能进行写操作。

如果我将 mysys() 的参数改为字符串数组:

技术图片

可以看到执行成功了。因为 char[] 是自动变量,是可以进行写操作的,这也是 char* 和 char[] 的一个重要区别!!

以上是关于strtok()出现segment fault的错误的主要内容,如果未能解决你的问题,请参考以下文章

segmentation fault

LINUX 环境下 调用动态库 出现segmentation fault 异常 请高手解答!

linux 出现 segment fault怎么解决

关于Release下没有问题,Debug下出现Segment Fault

运行mongodump时为什么会出现Segmentation Fault

Python调用C的SDK出现返回值不符合预期以及Segmentation fault