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


编程经验点滴(一)


定义字符串的问题

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
 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值