編程經驗點滴(一)——《C 語言中定義字符串的問題》


編程經驗點滴(一)


定義字符串的問題

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />
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 錯誤。

【源程序】<?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
 

發佈了34 篇原創文章 · 獲贊 1 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章