1. 程式人生 > >strlen /sizeof/ 0,'\0','0'中的陷阱

strlen /sizeof/ 0,'\0','0'中的陷阱

#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;
}