字符串操作的错误。编译没错,运行不了

cobra_chen 2010-07-13 11:51:39
bool Fun(char *str)
{
while(*str != '\0')
{
if(*str == 't')
{
*str = ' '; //调试在这走不下去了
}
str++;
}

return true;
}
void main()
{
char *str = "string test";
Fun(str);
cout<<str<<endl;
}

用指针把字符串里的't',改成' '。
用的VS2005编译器,
到这走不下去了。不知道为什么?
...全文
66 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonleo 2010-07-13
  • 打赏
  • 举报
回复
调试了一下你的代码,问题出在字符串所在的内存区域是只读,所以写入会引起异常。把字符串定义改为char str[] = "string test";就可以避开这个只读属性的限制
紫色动力 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cobra_chen 的回复:]
引用 1 楼 michael122 的回复:
str只是一个指针,指向一个常量字符串,本身没有空间
任何对它指向的内容的修改都是错误的
你应该申请一个字符数组就可以了


char *str = "string test";
不是已经申请了空间了么?
然后把这段空间的首地址给str,然后str再传给Fun里的str,不就可以用到申请的那段空间了么?.
如果我的理解错了的话,那应该……
[/Quote]

你这样做并没有申请空间。只是把一个常量赋值给指针,是会报错的。用malloc或者new才是申请空间。
yuhuaijun 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 michael122 的回复:]

str只是一个指针,指向一个常量字符串,本身没有空间
任何对它指向的内容的修改都是错误的
你应该申请一个字符数组就可以了
[/Quote]
zhangweiit 2010-07-13
  • 打赏
  • 举报
回复
"不是已经申请了空间了么?"
这个,应该不能说是申请了空间
char *str = "string test";
这一个语句的效果是这样的

"string test",保存在函数栈空间中
然后,*str指向它
"string test"的空间是不可修改的,因为是一个常量

而Func试图去修改它
*str = ' ';
笨笨周0915 2010-07-13
  • 打赏
  • 举报
回复
如果str指向的是常量区的话,那么会报错的,不能修改常量字符串,如果非常量字符串的话则可以Fun("aaaaa");或者 char* lp = "aaaa"; Fun(lp);这样肯定报错,char lp [] = "string test";这不会的
cobra_chen 2010-07-13
  • 打赏
  • 举报
回复
看来还是要好好看看指针。
cobra_chen 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 michael122 的回复:]
str只是一个指针,指向一个常量字符串,本身没有空间
任何对它指向的内容的修改都是错误的
你应该申请一个字符数组就可以了
[/Quote]

char *str = "string test";
不是已经申请了空间了么?
然后把这段空间的首地址给str,然后str再传给Fun里的str,不就可以用到申请的那段空间了么?.
如果我的理解错了的话,那应该怎么理解呢?
Fun里是不是不能对那段地址进行修改呢?
ArmStronger 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 michael122 的回复:]
str只是一个指针,指向一个常量字符串,本身没有空间
任何对它指向的内容的修改都是错误的
你应该申请一个字符数组就可以了
[/Quote]
char str[] = "string test";
michael122 2010-07-13
  • 打赏
  • 举报
回复
str只是一个指针,指向一个常量字符串,本身没有空间
任何对它指向的内容的修改都是错误的
你应该申请一个字符数组就可以了

64,642

社区成员

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

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