受不了了 这简直是个BUG 该死的vc6.0

aruaru77 2009-03-13 11:26:16
# include<iostream.h>
# include<string.h>

void revert(char* str)
{
int n = strlen(str);
int i = 0;
char c;
for(i = 0 ; i<=(n/2) ; i++)
{
c = str[i];
str[i] = str[n-i-1]; str[n-i-1] = c; //该行调试不过,说什么越界~!
}
}

void main()
{
char *s = "ABCDEFG";
revert(s);
cout<<s;
}
...全文
144 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

# include <iostream.h>
# include <string.h>

void revert(char* str)
{
int n = strlen(str);
int i = 0;
char c;
for(i = 0 ; i <=(n/2) ; i++)
{
c = str[i];
str[i] = str[n-i-1]; str[n-i-1] = c; //该行调试不过,说什么越界~!
}
}

void main()
{
char *s = "ABCDEFG"; //是const变量,改成char s[]="ABCDEFG";
revert(s);
cout < <s;
}

sunnywyg 2009-03-14
  • 打赏
  • 举报
回复
堆和栈的区别
yangch_nhcmo 2009-03-14
  • 打赏
  • 举报
回复

# include <iostream>
# include <cstring>
using namespace std;

void revert(char* str)
{
int n = strlen(str);
int i = 0;
char c;
for (i = 0 ; i <=(n/2) ; i++)
{
c = str[i];
str[i] = str[n-i-1];
str[n-i-1] = c;
}
}

int main()
{
//char *s = "ABCDEFG"; //这里s指向常量区,不能修改
char s[] = "ABCDEFG"; //这里s分配在栈上,能修改其数据
revert(s);
cout << s << endl;

return 0;
}

lingyin55 2009-03-14
  • 打赏
  • 举报
回复
up
ps:vc6.0的bug确实不少,可以考虑换9.0
[Quote=引用 1 楼 ltc_mouse 的回复:]
char *s = "ABCDEFG";
-----------------------------
s是常量字符串,不可更改!
换成char s[]="ABCDEFG";

编译器是可能有Bug,但也不应该轻易怀疑的,^_^
[/Quote]
chin_chen 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 aruaru77 的帖子:]
# include <iostream.h>
# include <string.h>

void revert(char* str)
{
int n = strlen(str);
int i = 0;
char c;
for(i = 0 ; i <=(n/2) ; i++)
{
c = str[i];
str[i] = str[n-i-1];str[n-i-1] = c;
}
}

void main()
{
char *s = "ABCDEFG";//系统常量区,不可改变的。
revert(s);
cout < <s;
}

[/Quote]
aruaru77 2009-03-14
  • 打赏
  • 举报
回复
谢谢谢谢大家~
舒坦了~

赚分有目标了,这时候不散对不起人
以后还是应该多一点
meteormeng 2009-03-14
  • 打赏
  • 举报
回复
up,解释的不错
sc_valentine21 2009-03-14
  • 打赏
  • 举报
回复
vc6.0是很好用,bug也存在很多。但是LZ的显然不是bug,上面解释很清楚了。
用了2005,感觉很多地方很好用,对于大的工程之类,2005估计是很好的了(2003,2008也行),只是2005对电脑的要求要高些
jwpl190 2009-03-14
  • 打赏
  • 举报
回复
s指向常量区,不能修改
sagegz 2009-03-14
  • 打赏
  • 举报
回复
其实char *s="ABCDEFG"的真正形式是const char *s="ABCDEFG"
既然觉得编译器不好,就换个用用.有比较才有发言权,对吧?
虽然我总说:珍爱生命,远离VC6.0~!(对标准支持不太好)
换个VS2005试试!
我也在2005中试了下

# include <iostream>
# include <string.h>
using namespace std;

void revert(char* str)
{
int n = strlen(str);
int i = 0;
char c;
for(i = 0 ; i <=(n/2) ; i++)
{
c = str[i];
str[i] = str[n-i-1];
str[n-i-1] = c; //该行调试不过,说什么越界~!
}
}

void main()
{
char *s = "ABCDEFG";
revert(s);
cout <<s;
}

出现warning C4267: “初始化”: 从“size_t”转换到“int”,可能丢失数据
虽然这样的问题不会在编译的时候报错,但是这才是真正可怕的错误!
ltc_mouse 2009-03-13
  • 打赏
  • 举报
回复
char *s = "ABCDEFG";
-----------------------------
s是常量字符串,不可更改!
换成char s[]="ABCDEFG";

编译器是可能有Bug,但也不应该轻易怀疑的,^_^

65,210

社区成员

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

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