用字符數組和字符串指針定義字符串常量時需要注意的一點

如下面兩段代碼:

 char b[ ]  = "I am a Chinese";

char * a  = "I am a Chinese";

它們分別是用字符數組和字符串指針來定義了字符串常量,一般情況下的使用都是互通的,即可以互換。但是在今天編寫字符串翻轉問題的代碼時,發現了一個他們之間的不同。即用字符串指針定義的字符串位於內存常量區,一般的編譯器都是不允許修改它的內容的。所以用char * a  = "I am a Chinese";時,行不通。具體代碼如下:

char * reverse_str(char * str)
 {
      if(str != NULL)
      {
             char * start = str;
             char item;
             int len = strlen(str);
             char * end = start + len - 1;
             while (start < end)
             {
                     item = (* start);
    (* start) = (* end);   //這是對常量區內存的修改語句,所以代碼執行到這句會奔潰
   (* end) = item;   //同上
          start++;
                     end--;
             }
             return start;
      }
      else
          return 0;
 }

而是用字符數組定義的字符常量則運行正常。因爲它存放在內存的棧區空間~

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