編程經驗點滴(一)
定義字符串的問題
作 者:楊延慶
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 錯誤。
【源程序】<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
#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