c語言的strlen函式計算字元陣列長度不對
今天在使用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;
}
相關文章
- C語言如何計算陣列的長度C語言陣列
- c語言獲取陣列長度的函式C語言陣列函式
- c語言中計算陣列長度的方法C語言陣列
- c語言字元陣列C語言字元陣列
- sizeof 和 strlen 計算陣列大小和長度詳解陣列
- C語言-字串函式的實現(一)之strlenC語言字串函式
- 字元陣列的長度字元陣列
- 獲取C/C++字串、字元陣列長度C++字串字元陣列
- C語言函式題-查詢陣列每行的最大值C語言函式陣列
- c語言的陣列C語言陣列
- C語言計算輸入字元的個數C語言字元
- C語言:計算輸入字元的個數C語言字元
- C語言陣列C語言陣列
- c語言關於陣列的簡單運算C語言陣列
- 求陣列長度的兩種方法,以及區別(strlen sizeof)陣列
- C語言:使用函式計算兩點間的距離C語言函式
- C++中strlen函式C++函式
- 力扣1438. 絕對差不超過限制的最長連續子陣列-C語言實現-中等難度力扣陣列C語言
- C語言的函式C語言函式
- C++陣列長度C++陣列
- 陣列操作,計算組元素的極值函式陣列函式
- C++獲取陣列的長度C++陣列
- C語言常用函式C語言函式
- C語言 execve()函式C語言函式
- strlen函式函式
- ARM彙編和C語言混合程式設計中陣列的陣列的操作C語言程式設計陣列
- C語言函式sscanf()的用法C語言函式
- C語言qsort函式的使用C語言函式
- C語言 指標與陣列C語言指標陣列
- C語言基礎-1、陣列C語言陣列
- C/C++ 陣列連結串列表示式計算C++陣列
- 用C語言寫strcat、strcpy、strlen、strcmpC語言
- 你不見得會計算C字串長度字串
- 08. C語言函式C語言函式
- C語言 函式指標C語言函式指標
- C語言基礎函式C語言函式
- C語言函式呼叫棧C語言函式
- C++學習筆記-C++對C語言的函式擴充C++筆記C語言函式