1
我在Windows7 Professional(32位)上使用C++ Builder XE4。將NULL字符串放入String()中的%s。sprintf()
我在下面的代碼中找到了區別。
String lbl = L"";
String msg1 = String().sprintf(L"[%s]", lbl);
ShowMessage(msg1); // [(null)]
String msg2 = String().sprintf(L"[%s]", lbl.c_str());
ShowMessage(msg2); // []
我期望msg1和msg2都是「[]」。但實際上,msg1是「[(null)]」。 msg1在語言規範方面是否正確?或者這是「未定義」的行爲?
另一個問題是我應該如何照顧這種錯誤(讓「lbl」不是「lbl.c_str()」)。因爲它們在編譯時都沒有顯示錯誤,所以在編譯時我不會注意到這種錯誤。
我希望知道這種錯誤的一些預防技巧,如果有的話。
非常感謝您的回覆。很高興知道有一些環境錯誤變得清晰。 – sevenOfNine