C字串末尾的'/0'問題

來源:互聯網
上載者:User

標籤:

C語言的字串要注意最後一位預設是‘/0‘的問題。這是一個易錯點。

strlen()計算長度時不考慮末尾的‘\0‘

//例1void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );}
string定義的長度是10,str1的最後一位預設為‘\0‘,所以str1其實長度為11。strcpy()函數中,如果第二個串比第一個串長,是沒有error的,第一個串的長度會增加,並且也可以正確的輸出第一個串。但是存在潛在的記憶體錯誤的問題,也就是說,在記憶體中,如果緊接string之後有內容,將被覆蓋,這樣會導致string之後的記憶體存取錯誤。來看一個好的寫法:
void test2(){    char string[10], str1[10];    int i;    for(i=0; i<9; i++)    {        str1[i]  = ‘a‘;    }    str1[9] = ‘\0‘;//體現水平的一步    strcpy( string, str1 );}

有的時候可能非常容易忽略這個小問題:

//例2void test3(char* str1){ if(str1 == NULL){        return ; } char string[10]; if( strlen( str1 ) <= 10 ) { strcpy( string, str1 ); }}

這裡if( strlen( str1 ) <= 10 )應該寫成if( strlen( str1 ) < 10 ),因為strlen的結果未統計’\0’所佔用的1個位元組。

C字串末尾的'/0'問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.