您的位置:首页 > 其它

关于字符串、数组的strlen()和sizeof()

2010-10-04 20:34 351 查看
/**
sizeof返回数组的内存分配大小,而strlen返回数组中 已存放 的字符串的内存分配大小,非整个数组的内存分配大小
**/
#include<stdio.h>
#include<string.h>

int main()
{ //sizeof strlen
char str[] = "abc"; // 4 3 ,'\0'占据一个字节
// char str1[3] = "abc"; //
char str2[4] = "abc"; // 4 3
char str3[5] = "abc"; // 5 3
char str4[] = {'a','b','c'}; // 3 7 ?
char str51[3] = {'a','b','c'}; // 3 11 ?没有溢出但strlen这么诡异?
// char str52[2] = {'a','b','c'}; // too many initializers
char str6[5] = {'a','b','c'}; // 5 3
char str71[] = {'a','b','c','\0'}; // 4 3,为分配指定大小,但默认'\0'为结束符,sizeof返回4
char str72[] = {'a','b','c','\0','d'}; // 5 3,sizeof返回数组所分配空间的大小,strlenstrlen统计到'\0'结束故为3
char str8[7] = {'a','b','c','\0','d'}; // 7 3,虽'\0'为第四个字符,但已为其分配大小为7的空间,故sizeof返回7,strlen统计到'\0'结束故为3
char * str9 ="abc"; // 4 3
// char * str10 = {'a','b','c','\0'};//cannot convert from 'const char' to 'char *'

printf("sizeof str: %d\n",sizeof(str));
// printf("sizeof str1: %d\n",sizeof(str1));
printf("sizeof str2: %d\n",sizeof(str2));
printf("sizeof str3: %d\n",sizeof(str3));
printf("sizeof str4: %d\n",sizeof(str4));
printf("sizeof str51: %d\n",sizeof(str51));
// printf("sizeof str52: %d\n",sizeof(str52));
printf("sizeof str6: %d\n",sizeof(str6));
printf("sizeof str71: %d\n",sizeof(str71));
printf("sizeof str72: %d\n",sizeof(str72));
printf("sizeof str8: %d\n",sizeof(str8));
printf("sizeof str9: %d\n",sizeof(str9));
printf("\n");
printf("strlen str: %d\n",strlen(str));
// printf("strlen str1: %d\n",strlen(str1));
printf("strlen str2: %d\n",strlen(str2));
printf("strlen str3: %d\n",strlen(str3));
printf("strlen str4: %d\n",strlen(str4));
printf("strlen str51: %d\n",strlen(str51));
// printf("strlen str52: %d\n",strlen(str52));
printf("strlen str6: %d\n",strlen(str6));
printf("strlen str71: %d\n",strlen(str71));
printf("strlen str72: %d\n",strlen(str72));
printf("strlen str8: %d\n",strlen(str8));
printf("strlen str9: %d\n",strlen(str9));

return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: