2013-01-24 45 views
1

同事(serioussly我不使用字符* :))製成以減少這種錯誤:傳遞長度爲0的字符串( '0'),以意想不到的char STL功能*

testVar.append('\0'); //testVar is std::string 

所以他基本上是這樣的修復它:

testVar.append("\0"); 

我的問題是爲什麼第一個不合法? 不能被視爲0長度0終止的字符串? 我試過進入VS10 std lib實現來查看自己,但我後悔了。 :)

+2

問題是'\ 0'是一個0值的char,也可以解釋爲0指針的特殊值爲0的空指針。 所以append('\ 0')調用append((const char *)0) –

回答

6

'創建一個char文字,它不是字符串/ char *相同。有些語言將單個字符視爲長度爲1的字符串,但C++將單個字符定義爲原始數據類型,而字符串是字符數組。

+3

此外,在第一個中,''0'被視爲等於'0'的char,可以被視爲const char *'上的空指針。 – m0nhawk

+0

@ m0nhawk:True;直到你指出來,我才意識到這一點。 –

+0

@ m0nhawk好點,它實際上被轉換爲char * :(現在很明顯。:) tnx,也是A很好的ofc。 – NoSenseEtAl

相關問題