1613551 发表于 2022-8-17 11:15:36

关于字符数组的问题

为什么这两种命名方式最后计算的大小不同?
char类型的数组不是都会在最后自己追加一个\0的吗?,所以还得留一个空间给\0。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char a[] = "abcd";
char b[] = {'a', 'b', 'c', 'd'};
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(b));
return 0;
}

wp231957 发表于 2022-8-17 11:37:42

a 应该是含杠0   b肯定不含   所以b的长度应该是4

临时号 发表于 2022-8-17 12:53:22

你要搞清楚,字符数组和字符串是两种东西
只有末尾是\0的字符数组才能叫字符串,不然只能叫字符数组
在你的程序中,a是字符串,而b是字符数组
a在内存中是这样的:
| 'a' | 'b' | 'c' | 'd' | '\0' |
而b在内存中是这样的:
| 'a' | 'b' | 'c' | 'd' |
区别就是b没有\0,所以不能被称作字符串
所以a的大小是5,b的大小是4
如果想让b是字符串的话,你需要这样赋值
char b[] = {'a','b','c','d','\0'};
页: [1]
查看完整版本: 关于字符数组的问题