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的错误的主要内容,如果未能解决你的问题,请参考以下文章
LINUX 环境下 调用动态库 出现segmentation fault 异常 请高手解答!
关于Release下没有问题,Debug下出现Segment Fault