1、定义字符串的问题
一个朋友在开发中遇到的问题,
TC3下编译通过,运行正常;
VC6下编译通过,运行出现越界错误;
Linux 下gcc version 3.2.2 编译通过,运行出现 Segmentation Fault 错误。
【源程序】
//test1.cpp
#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=%s \t j=%s", 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 指向一个常数的空间,所以不能进行赋值操作(把while中的赋值语句取消就没有问题)。
【解决办法】
定义的形式换为“char s[] = "hello!"”。
【未完问题】
水平高了以后看看汇编的代码,看看为什么会出现“Segmentation Fault”。