以下代碼正在工作,我正試圖瞭解如何。引用C++臨時字符串的內容
int Process::processTextFile(const boost::filesystem::path& infile)
{
const char *file = infile.string().c_str();
uint16_t num_lines = 0;
.
.
.
FILE *fp;
fp = fopen(file, "r");
.
.
//Use fp for reading and stuff.
}
從我所瞭解的infile.string()
創建一個臨時文件指向內容。當語句結束時(;)臨時字符串應該超出範圍,導致文件成爲懸掛指針。
我將使用字符串而不是char*
但仍需要了解我所缺少的。
編譯器 - GCC 4.8.4
優化 - O3
如果在調用'c_str()'和使用'const char * file'之前沒有其他局部變量被創建,你可能會很幸運*。該臨時字符串的內容仍可能存在於內存中,但您無法保證。結論:這是未定義的行爲,**不這樣做**。 – zett42
@ zett42。更新我的問題。文件之後創建了局部變量。這段代碼已經使用了很長時間,並沒有失敗AFAIK。如果每次幸運我都有一分錢,現在我會成爲地球上最富有的人。 :)只是想確保我的理解沒有差距。 –