strlen /sizeof/ 0,'\0','0'中的陷阱
阿新 • • 發佈:2018-12-31
#include<stdio.h>
#include<string.h>
main()
{
char x[]="STRING";
x[0]=0; x[1]='\0';x[2]='0';
printf("%d %d\n",sizeof(x),strlen(x));
}
結果為7,0一旦char[]="STRING",這時候分配的記憶體7位元組,之後無論怎麼修改如何賦值都不會改變 字串是藉助於字元型一維陣列來存放的,'\0'ASCLL程式碼值為0,它作為標誌佔用儲存空間但不記入串的實際長度,所以用來作為字串的結束標誌
所以數字0跟'\0'的效果一樣
#include<stdio.h> #include <string.h> int main(void) { char p[]="123067"; printf("%d\n",strlen(p)); //結果為6 p[3]=0; printf("%d\n",strlen(p)); //結果為3字串是藉助於字元型一維陣列來存放的,'\0'ASCLL程式碼值為0,它作為標誌佔用儲存空間但不記入串的實際長度, // 所以用來作為字串的結束標誌 ,所以數字0跟'\0'的效果一樣 return 0; }