简单字符串问题!很迷惑!

sharkoasis 2007-03-01 01:15:02
#include <string.h>
#include <stdio.h>

int main()
{
char *s="0123456789012345678901234567890";
char *p;
p=strrchr(s,'5');
printf("%s\n",p);
*p='\0';//问题所在
//int len=strlen(s)-strlen(p);
//s[len]='\0';
printf("%s\n",s);
}

编译通过,运行时段错误!
但是用gdb却能调通!gcc3.4.3
不知道为什么?求解!
...全文
254 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkoasis 2007-03-01
  • 打赏
  • 举报
回复
我也觉得是这个问题!
可以这是公司一个项目中某个函数的代码!不知道为什么一直也没有问题!
晨星 2007-03-01
  • 打赏
  • 举报
回复
你原来的那个s只是个指针,指向了常量区中的内容。
于是后面的
*p='\0';
就是修改常量区,修改常量区结果是未定义的,所以发生gdb调试可以调通而直接跑却不行也就不值得奇怪了。
todototry 2007-03-01
  • 打赏
  • 举报
回复
*p='\0';//问题所在
==================
修改常量区数据了,改成数组同ls,存放于栈空间
晨星 2007-03-01
  • 打赏
  • 举报
回复
char *s="0123456789012345678901234567890";
改成
char s[]="0123456789012345678901234567890";
吧。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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