生无涯

吾生也有涯,而知也无涯,以无涯随有涯,乐以忘忧,生亦无涯矣www.cnblogs.com/shengwuya
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2010-10-04 20:34  生无涯  阅读(971)  评论(1编辑  收藏  举报

/**
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;
}