码迷,mamicode.com
首页 > 其他好文 > 详细

strtok()出现segment fault的错误

时间:2020-05-24 11:24:05      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:而在   存储   mic   静态   mamicode   原因   strtok   str   实现   

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

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

终于寻找到原因:

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

这样错误原因就明显了!

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

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

技术图片

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

strtok()出现segment fault的错误

标签:而在   存储   mic   静态   mamicode   原因   strtok   str   实现   

原文地址:https://www.cnblogs.com/HOMEofLowell/p/12949040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!