您的位置:首页 > 编程语言

编程经验点滴(一)——《C 语言中定义字符串的问题》

2004-10-13 11:41 423 查看

编程经验点滴(一)


定义字符串的问题


2004-10-13


作 者:杨延庆
E-mail:blankmanATtomDOTcom
出 处:http://blog.csdn.net/blankman/archive/2004/10/24/programing_experience1.aspx

一个朋友在开发中遇到的问题,
TC3下编译通过,运行正常;
VC6下编译通过,运行出现越界错误;
Linux 下gcc version 3.2.2 编译通过,运行出现 Segmentation Fault 错误。

【源程序】

#include <stdio.h>
#include <string.h>

int main()
{
char ch;
char *s="hello!";
int i=0;

int j=strlen(s)-1;
while(j>i)
{
printf("/ni=%d /t j=%d", i, j);
ch=s[j];
s[j]=s[i];
s[i]=ch;
i++;
j--;
}
printf("%s/n",s);
getch();
return 0;
}

【linux下的情况描述】
g++ test1.cpp -o test1
./test1
Segmentation fault
在出现错误提示之前无任何输出,单步调试在return之前都正常。

【问题原因】
gcc 中“char *s = "hello!"” s 指向的一个常量空间,所以不能进行赋值操作。
Tc3 边界检查不是十分严格,所以并没有报错。

【解决办法】
定义的形式换为“char s[] = "hello!"”。

【未完问题】
有空了把 Tc3 和 gcc 对此的汇编代码贴出来大家看了就清楚了。

下一篇:编程经验点滴(二)——《函数调用时参数压栈顺序的问题(2004-10-24)》

声明:原创,版权所有,如需转载请注明出处。
http://blog.csdn.net/blankman/archive/2004/10/24/programing_experience1.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: