编程经验点滴

类别:编程语言 点击:0 评论:0 推荐:

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”。


本文地址:http://com.8s8s.com/it/it26678.htm