近期由於memcpy字串的時候,沒有將結束符拷貝進去,導致字串結尾有亂碼,如圖:
std::ostringstream osg;
osg.str("");
osg << "";
string p = osg.str();
int len = strlen(p.c_str());
char * buffer = new char[len];
memcpy(buffer, p.c_str(), len);
又來找到原因為,new記憶體的時候,記憶體長度應該包括字串結束符'\0'的長度,而strlen(),計算的長度是有效長度,沒有包括'\0',所以在memcpy的時候,
會導致結尾的亂碼。正確的**應該這樣:
std::ostringstream osg;
osg.str("");
osg << "";
string p = osg.str();
int len = strlen(p.c_str());
char * buffer = new char[len+1];
memcpy(buffer, p.c_str(), len+1);
C語言中字串結束符 0
本質 0 就是8位的00000000,因為字元型別中並沒有對應的這個字元,所以這麼寫。0 就是 字串結束標誌。0 是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元 0對應的二進位制為00000000,而數字0為00110000 原來,在c語言中沒有專門的字串變數,通常用乙個字元陣列來存...
C語言中字串結束符 0
本質 0 就是8位的00000000,因為字元型別中並沒有對應的這個字元,所以這麼寫。0 就是 字串結束標誌。0 是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元 0對應的二進位制為00000000,而數字0為00110000 原來,在c語言中沒有專門的字串變數,通常用乙個字元陣列來存...
C語言字串結束符
0 就是8位的00000000,因為字元型別中並沒有對應的這個字元,所以這麼寫。0 就是 字串結束標誌。0 是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元 0對應的二進位制為00000000,而數字0為00110000 原來,在c語言中沒有專門的字串變數,通常用乙個字元陣列來存放乙個...