首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

字符数组的长度有关问题

2012-02-04 
字符数组的长度问题C/C++ codechar test1[3] {a, b, c}char test2[] {abc}printf(sizeof(t

字符数组的长度问题

C/C++ code
    char test1[3] = {'a', 'b', 'c'};    char test2[] = {"abc"};    printf("sizeof(test1)=%d\n", sizeof(test1));  // 3    printf("strlen(test1)=%d\n", strlen(test1));  // 7?怎么得来的,依编译器不同而变化?    printf("sizeof(test2)=%d\n", sizeof(test2));  // 4    printf("strlen(test2)=%d\n", strlen(test2));  // 3    // char test1[4] = {'a', 'b', 'c', '\0'};    // printf("sizeof(test1)=%d\n", sizeof(test1));  // 4    // printf("strlen(test1)=%d\n", strlen(test1));  // 3,正常。


Windows下的C-free。



[解决办法]
char test1[3] = {'a', 'b', 'c'};
char test2[] = {"abc"};

printf("sizeof(test1)=%d\n", sizeof(test1)); // 3 这个就获得数组大小,3个元素,都是1个字节
 
 printf("strlen(test1)=%d\n", strlen(test1)); // 7 strlen根据\0判断结尾,这个值取决当前字符C后面多远有\0,根据系统内存情况随机。

printf("sizeof(test2)=%d\n", sizeof(test2)); // 4 正确,数组有四个元素 a b c \0
printf("strlen(test2)=%d\n", strlen(test2)); // 3 数组长度3 ,不包含\0
[解决办法]
char test1[3] = {'a', 'b', 'c'};对test1计算长度,因为没有以'\0'结尾,所以计算的长度是不确定的,因为找不到'\0'就不知道在哪儿结束了。而你的test2是字符串"abc",系统会自动给它加上'\0',所以计算的长度是3(strlen)。
[解决办法]
printf("sizeof(test1)=%d\n", sizeof(test1)); // 3
char test1[3] = {'a', 'b', 'c'};一共三个元素

printf("strlen(test1)=%d\n", strlen(test1)); // 7
strlen必须碰到\0才结束,你test1[]后面存的是test2[]而test2[]是字符串类型,所以强制会给你的test2[]后面加一个\0;比如你这样声明就会有问题test2[3]="abc"因为你没有给\0留下位置
printf("sizeof(test2)=%d\n", sizeof(test2)); // 4
上面的懂了这个应该也懂了吧
printf("strlen(test2)=%d\n", strlen(test2)); // 3
strlen判断的时候\0会被丢掉不计算在字符串的长度内

热点排行