如下面兩段代碼:
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;
}
而是用字符數組定義的字符常量則運行正常。因爲它存放在內存的棧區空間~