關於C語言字串計算長度 ( 編譯器支援c99up :%zu )

補出一個要點,關於c語言中,在一般計算字元陣列,正確上是使用%zu(編譯器支援c99或更新)來讀取sizeof所計算的數值,若編譯器沒有支援c99或使用c89,c90等以前的版本則使用%u和%lu。
另外,字串使用雙引號都會在最後加上\0,所以像是Hello world字串本身內容是11字元長,加上使用雙引號在最後加上得\0,所以會增加1字元,所以不管內容是多長,都要自動加上1,例如pass[ ]="pass"字串陣列長度為5個字元(本身4字元)。
#include<stdio.h>
#include<string.h>
int str_l(char []);
int main(){
char str[]="hello world";
printf("字元內容: %s\n",str);
printf("字元陣列長度: %zu\n",sizeof(str));
printf("本體長度: %d\n",str_l(str));

return 0;
}
int str_l(char str[]){
int i;
while(str[i]!='\0'){
++i;
}
return i;
}
當然可以給字元陣列一個大於本體所需的字元長度,例如"hello world",本體11字元加上1個字元的\0,一共12個字元,在宣告char str[20]="hello world";雖然本身文字一共只用11字元,但範圍已指定空間20字元,所以其餘後面的位置皆會補上\0,當使用%zu去sizeof(字元陣列)求出來的依然會是20字元。

留言