char* message与char message[]所导致的core dump的问题

javashit 2014-04-23 09:46:53
问题和这个url里说的一模一样
http://blog.chinaunix.net/uid-20519550-id-1655944.html

转发到此:
当 char* message="$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,138,42*71";

parse(message);就会core dump;
如果 
char message[]="$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,138,42*71";
就正常了。


void parse( char* message )
{
char *pch;
//char *message1="hello-world";

printf( "can parse\n" );
pch = strtok( message,",*");
printf( "over" );

while( pch != NULL ){
printf( "%s\n", pch);
pch= strtok( NULL ,",*");
}

}


请问是怎么回事?
...全文
200 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
javashit 2014-04-23
  • 打赏
  • 举报
回复
受教了。。。 那 char *pch; char *message1="hello-world"; pch 是个变量 message1是个常量???
赵4老师 2014-04-23
  • 打赏
  • 举报
回复
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!
羽飞 2014-04-23
  • 打赏
  • 举报
回复
楼主不清楚char *message = ""与char message[]的区别 第一个,message指向的是一个常量字符串,这一段内存不能修改; 第二个,message是一个数组,他的内存放的是一个字符串,内存可以修改 再看看parse函数调用的strtok函数,有这么一段说法: strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。 很明显,strtok要修改对应的内存 所以用char *message肯定会core
shlvshe00 2014-04-23
  • 打赏
  • 举报
回复
引用 3 楼 javashit 的回复:
受教了。。。 那 char *pch; char *message1="hello-world"; pch 是个变量 message1是个常量???
pch,message1自身是一个指针,为变量,但是message1指向的内容是常量
javashit 2014-04-23
  • 打赏
  • 举报
回复
还是没人回答吗??

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧