我正在學習c ,我寫了一些代碼,把一個字串轉換成大寫字母并顯示出來。我用 "asdf "分配了一個字串str,然后創建了一個char array指標,并分配了一個與字串相同的長度。
但是,當我用大寫字母分配了char陣列的索引后,當我試圖顯示char陣列時,有許多垃圾字符被附加到了末尾。為什么會發生這種情況,因為我只分配了一個大小="字串長度 "的char陣列,那么即使在實際分配的大小之后,char陣列的末尾怎么會有垃圾字符。
string str{ "asdf"/span> }。
char* str_c = new char[str.length() ] 。
for (int i = 0; i < str.length(); i ) {
str_c[i] = toupper(str[i])。
}
cout << str_c; //顯示ASDF2▌r┐│w2A?。
uj5u.com熱心網友回復:
你的char陣列需要比字串的長度多一個字符,以作為空結尾
string str{ "asdf"/span> }。
char* str_c = new char[str.length() 1] 。
for (int i = 0; i < str.length(); i ) {
str_c[i] = toupper(str[i])。
}
str_c[str.length()] = ''/span>。
cout << str_c; //顯示ASDF。
在C風格的字串(char*)中,字串的長度不存盤在記憶體中。因此,它必須使用一些其他方式來確定字串的結束位置。它的方法是假設字串是所有位元組,直到等于零的位元組(所謂的空終結符)。
如果不明確地為空結束符分配一個額外的位元組并對其進行設定,你的字串就會繼續使用你所分配的位元組之后的垃圾,直到它(意外地)遇到最近的0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/324446.html
標籤:
