c語言的strlen函式計算字元陣列長度不對

只會git clone的程式設計師發表於2020-03-02

今天在使用strlen的時候碰到一個很奇怪的問題。
定義了一個字元陣列,列印它長度:

char ch[4] = { 'h','o','m','e' };
printf("%d",strlen(ch));

輸出結果一會是15,一會是19。
除錯了下發現記憶體中‘ e ’後頭是‘ ?’,所以strlen把‘ ? ’也算到了ch的長度中。可是我記得c語言定義陣列會在結尾加上\0的呀。
然後我發現了把陣列的長度改成5,strlen的列印結果就是對的了。

char ch[5] = { 'h','o','m','e' };
printf("%d",strlen(ch));

究其原因就是,你初始化靜態陣列的大小應該是已有字元數加一,你需要給\0留上一個空間。如果沒有這個空間程式是不會給你自動補上’\0’的

strlen原始碼:

int Strlen(const char * const s)
{
	int i;
	for (i = 0; s[i]; i++);
	return i;
}

相關文章