作者cole945 (躂躂..)
看板Programming
標題Re: [問題] C/C++中char*與char[]的差異
時間Wed Oct 18 21:57:32 2006
※ 引述《ykjiang (Yukuan)》之銘言:
: char *str = "string";
: 就是
: const char str[] = "string";
: 的簡略寫法,這是 C++ 從 C 那沿襲來的陋習。已經是慣用法了。
: 如果你還不懂,建議先去搞清楚 stack, heap 及 literal pool 間的差別。
前者的 str 是 pointer,
後者的 str 是 char arry,
前者的 "string" 是 string literal,且為 static storage duration
所以在程式結束前位址都有效
但後者..如果你是宣告在function內..
那他就是 local 變數..在return 後就無效(被pop掉)
以如下程式碼為例
const char *str1()
{
const char str[] = "string";
return str;
}
void str2()
{
const char str[] = "XXXXXX";
}
int main()
{
const char *str;
str = str1(); // 令 str 為 str1()內的str的址
str2();
printf("%s\n", str);
return 0;
}
大部份的編譯器編出來的程式應該會印出
XXXXX 而不是 string
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.139.189.40
推 Arton0306:這裡我印出亂碼耶@@ 210.58.5.192 10/19 01:10
→ cole945:我是用g++/3.4.4~ @___@" 220.139.189.40 10/19 01:20