strtok()出现segmentfault的错误(代码片段)

homeoflowell homeoflowell     2022-12-13     680

关键词:

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

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

终于寻找到原因:

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

这样错误原因就明显了!

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

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

技术图片

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



linux出现segmentfault怎么解决

1.段错误是什么一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。这里贴一个对于“段错误”的准确定... 查看详情

关于release下没有问题,debug下出现segmentfault

... 在项目开发中出现Release下跑程序没有问题,Debug下出现SegmentFault。  代码如下:voidfun(intlines)int*pA;  if(pA==nullptr)  pA=newint[lines];  memset(pA,0,sizeof(int)*lines);//SegmentFault原因:  Debug下局部变量中指针没有初始化,而编... 查看详情

如何获得最后的strtok?

】如何获得最后的strtok?【英文标题】:Howtogetthelaststrtok?【发布时间】:2016-06-1008:23:07【问题描述】:我想拆分一个“字符串”(分隔符\\)以获取最后一次出现的位置。This是我写的代码:charstr[]="D:\\\\GoogleDrive\\\\MyFiles\\\\Test.zi... 查看详情

函数内部还是不要使用strtok()

...个小时没找到原因。在吃饭的时候,突然想起可能是 strtok()引起的,查找调用的函数,果然发现在函数中使用了 strtok()。而现在的问题就是在另一段代码中先使用了 strtok(),然后在没有结束前,又调用了一个内部使用&n... 查看详情

为啥当我使用不同版本的 GCC 时使用 strtok 函数时出现此错误?

】为啥当我使用不同版本的GCC时使用strtok函数时出现此错误?【英文标题】:WhyisthiserroronusingstrtokfunctionshowingwhenIuseadifferentversionofGCC?为什么当我使用不同版本的GCC时使用strtok函数时出现此错误?【发布时间】:2020-08-2823:56:54【... 查看详情

linux出现segmentfault怎么解决?

参考技术ALinux系统下面出现:Segmentfault(段错误)提示信息,有时候是由于你自己在编写程序的过程中,有数组越界、或者是内存泄漏(例如:引用了空指针)等原因造成的。具体是哪一种情况,就需要自己仔细查看自己编写的... 查看详情

Strtok_r 返回 NULL

】Strtok_r返回NULL【英文标题】:Strtok_rreturningNULL【发布时间】:2019-06-1914:47:47【问题描述】:我正在尝试对从文件中提取的字符串进行标记。strtok_r在第一个子字符串上正常工作,然后返回null(以及分段错误,因为我尝试将strndu... 查看详情

在c ++中执行后出现“段错误”错误[关闭]

...+中执行后出现“段错误”错误[关闭]【英文标题】:"segmentfault"errorafterexecuteinc++[closed]【发布时间】:2014-01-1708:57:38【问题描述】:我对此代码有疑问。该程序旨在使用C++中的深度优先搜索。我用Dev-Cpp、TurboC++和VisualStudio... 查看详情

springboot中使用springsecurity,登录url就出现403错误

参考链接:https://segmentfault.com/q/1010000012743613有两个controller,一个是所有用户可以访问的@RequestMapping("user"),还有一个是管理员可以访问的@RequestMapping("admin")。/user/login是UserController中的登录url。所有操作(除登录注销)都要登录之... 查看详情

NULL 的 Strtok 用法

】NULL的Strtok用法【英文标题】:StrtokusagewithNULL【发布时间】:2015-11-1603:33:26【问题描述】:我在http://www.cplusplus.com/reference/cstring/strtok/上找到了使用strtok()的示例,但不明白它们是如何通过"pch=strtok(NULL,",.-");"从一个令牌到另一... 查看详情

strtok函数

strtok函数是cstring文件里的函数strtok函数是cstring文件里的函数其功能是截断字符串原型为:char*strtok(chars[],constchar*delin);s[]是要截断的字符串,delin是用来截断的字符串。每次调用成功后则返回切割出片段的指针。比如,strtok("aa... 查看详情

关于函数strtok和strtok_r的使用要点和实现原理

...://astute11.blog.51cto.com/4404646/1334199(一)中已经介绍了使用strtok函数的一些注意事项,本篇将介绍strtok的一个应用并引出strtok_r函数。 1.一个应用实例网络上一个比较经典的例子是将字符串切分,存入结构体中。如,现有结构... 查看详情

关于函数strtok和strtok_r的使用要点和实现原理

本文转载自:http://astute11.blog.51cto.com/4404646/1334198strtok函数的使用是一个老生常谈的问题了。该函数的作用很大,争议也很大。以下的表述可能与一些资料有区别或者说与你原来的认识有差异,因此,我尽量以实验为证。交代一... 查看详情

strtok() 可以安全使用吗?

】strtok()可以安全使用吗?【英文标题】:Isstrtok()safetouse[duplicate]【发布时间】:2015-06-0109:50:45【问题描述】:我正在阅读很多关于strtok()的负面信息,有人说它已经过时,有人说它不是线程安全的,等等。那么真相是什么,我... 查看详情

strtok()函数(代码片段)

说明(1)当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为 查看详情

strtok()函数

strtok()这个函数大家都应该碰到过,但好像总有些问题, 这里着重讲下它首先看下MSDN上的解释:char*strtok(char*strToken,constchar*strDelimit);ParametersstrTokenStringcontainingtokenortokens.strDelimitSetofdelimitercharacters.ReturnValueRe 查看详情

strtok函数的使用注意事项

1.函数原型及其基本应用   strtok函数是用来分解字符串的,其原型是: [cpp] viewplain copy char *strtok(char str[], const char *delim);    其中str是要分解的字符 查看详情

字符串上 strtok() 的 C++ 用法

】字符串上strtok()的C++用法【英文标题】:C++usageofstrtok()onstring【发布时间】:2012-07-2409:53:02【问题描述】:我从回答我之前的question的人那里尝试了以下代码。我的情况是我试图在此字符串中获取值1.2597,我的非功能性要求是使... 查看详情