2
今天我遇到了下面的代碼塊:當返回一個本地字符數組爲什麼strcpy工作,但字符串構造函數失敗?
#include <iostream>
using namespace std;
char *return_char_array(const char *cptr)
{
char charArray[100] = {0};
strcpy(charArray, cptr);
return charArray;
}
int main()
{
const char *cptr = "test";
char localCharArray[100] = {0};
strcpy(localCharArray, return_char_array(cptr)); // output "test"
cout<<localCharArray<<endl;
string s = return_char_array(cptr); // corrupt output
cout<<s<<endl;
return 0;
}
當時我還以爲這兩個輸出將被破壞的一見鍾情,但令人驚訝的是第一輸出爲「測試」,而第二個是腐敗。有人會告訴我爲什麼嗎?
未定義的行爲是未定義的...編輯:實際上,這甚至不會爲我編譯,因爲您給出了'return_char_array()''const char *',並且不能隱式拋棄'const'ness 。但是,我猜這是因爲調用'strcpy()'沒有在堆棧上放置足夠的內存來覆蓋特定的內存區域,而創建一個'string'的確如此。 – BoBTFish 2012-03-27 11:28:45
@BoBTFish對不起,我在參數列表中丟失了'const' .. – OriginalWood 2012-03-27 11:34:22
Cure:'std :: string'和其他標準庫容器。 – 2012-03-27 11:35:02