sizeof和strlen()区别

sizeof关键字和strlen()标准函数都可以用来测试字符串的长度,但是两者有很大的不同

  • sizeof只能在本函数内, 使用""不指定长度的字符数组中才能测出字符串的真实长度,当然,包括'\0'
  • strlen()任何情况下都能正确的得出字符串的字面值大小
  • 本函数内,sizeof测试char* s的结果是4byte,测试指定长度的数组是指定的长度
  • 在函数外部,sizeof测试的所有形式的字符串都是4byte
#include<stdio.h>
#include<string.h>
int fcn(const char* str){
	printf("in fcn :sizeof(str):%d\n",sizeof(str));
	printf("in fcn :strlen(str):%d\n",strlen(str));
}

int main(int argc, const char *argv[])
{
	char a[]="12";
	char arr[10]="12";
	char* s="12";
	printf("in main:sizeof (\"12\"):%d\n",sizeof("12"));
	printf("in main:strlen (\"12\"):%d\n",strlen("12"));
	printf("in main:sizeof(a):%d\n",sizeof(a));
	printf("in main:strlen(a):%d\n",strlen(a));
	printf("in main:sizeof(arr):%d\n",sizeof(arr));
	printf("in main:strlen(arr):%d\n",strlen(arr));
	printf("in main:sizeof(s):%d\n",sizeof(s));
	printf("in main:strlen(s):%d\n",strlen(s));
	fcn("12");
	fcn(a);
	fcn(arr);
	fcn(s);
	return 0;
}

输出结果

$./a.out 
in main:sizeof ("12"):3
in main:strlen ("12"):2
in main:sizeof(a):3
in main:strlen(a):2
in main:sizeof(arr):10
in main:strlen(arr):2
in main:sizeof(s):4
in main:strlen(s):2
in fcn :sizeof(str):4
in fcn :strlen(str):2
in fcn :sizeof(str):4
in fcn :strlen(str):2
in fcn :sizeof(str):4
in fcn :strlen(str):2
in fcn :sizeof(str):4
in fcn :strlen(str):2
posted @ 2016-10-14 19:45  Abnor  阅读(766)  评论(0编辑  收藏  举报