2 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
操作字串時(shí),不要忘了給最后的'\0'分配空間,不然輸出時(shí)就會(huì)帶著亂碼,正確的做法是:
char *ch2 = new char[6];
strncpy(ch2, ch3, 5);
ch2[5] = '\0';
cout << ch2 << endl;
不能少了這句
delete[] ch2;
之所以出現(xiàn)亂碼,是因?yàn)閳?zhí)行strncpy的過(guò)程中并沒(méi)有將字串結(jié)束符'\0'賦值給目標(biāo),目標(biāo)字串沒(méi)有結(jié)束符輸出時(shí)自然就不知道應(yīng)該什么時(shí)候停止輸出,除非遇到'\0'字符,因此你會(huì)看到亂碼,就這樣。

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
分析下strncpy的源代碼應(yīng)該就明白了 ,庫(kù)函數(shù)并沒(méi)有對(duì)dest檢查,有可能dest不是以'\0'結(jié)尾, 輸出的時(shí)候就會(huì)出錯(cuò)了
char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;
while (count && (*dest++ = *source++)) /* copy string */
count--;
if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';
return(start);
}
- 2 回答
- 0 關(guān)注
- 95 瀏覽
添加回答
舉報(bào)