编程经验点滴(一)——《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
相关文章推荐
- linux下C语言编程之位运算和字符串运算中遇到的问题:20120707苏嵌实训第第六天
- 翻译《有关编程、重构及其他的终极问题?》——18.你在一个语言上积累的经验和知识不总是适用于另外一门语言
- 编程经验点滴(二)——《C、C++中函数调用时参数压栈的顺序问题》
- 编程经验点滴----巧妙解决 Oracle NClob 读写问题
- 编程经验点滴(三)——《C、C++中指针加 1 的问题》
- C#串口编程问题:一个测试数据怎么拆分成2个字符串,做了2次发送?
- c 语言中连续输入两个字符串的问题
- 编程纠错--help others--计算器--又是忘记消除缓存还有函数定义的问题
- 【C++】编程小结②-- 字符串&定义变量
- 总结:JNI编程时遇到的问题-(1) 处理字符串
- VB编程经验点滴
- EVC编程经验点滴(一)
- Matlab有关 定义带引号的字符串的问题
- Qt国际化——多语言翻译时值得注意的一个编程问题
- 读书笔记之编程之美 – 3.1 字符串移位包含的问题
- 汇编语言:实验10 根据材料编程—2.解决除法溢出的问题
- 解决用JS脚本语言获取服务端的session的问题的个人小经验
- VC编程问题:为什么在Windows中这样定义POINT?(转)
- 汇编语言编程中遇到的一个跨文件函数调用问题
- 程序员编程艺术:第二章、字符串是否包含问题