字元拷貝時字串結束符 0 很重要

2021-07-25 16:52:20 字數 642 閱讀 9758

近期由於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語言中沒有專門的字串變數,通常用乙個字元陣列來存放乙個...