我有:
#include <stdio.h>
int main()
{
char ch[] = "Hello";
char wd[] = "World";
char ex[] = "!";
printf("The size of a char: %ld\n",sizeof(char));
printf("The size of ch[]: %ld\n",sizeof(ch));
printf("The size of ex[]: %ld\n",sizeof(ex));
printf("The size of wd[]: %ld\n",sizeof(wd));
return 0;
}
哪个收益:
The size of a char: 1
The size of ch[]: 6
The size of ex[]: 2
The size of wd[]: 6
我的问题:由于char的大小是1个字节,为什么ch []的大小不是5个字节?因为它有5个字符(H,e,l,l和o)
wd []和ex []也是如此。这是怎么回事?
对不起,如果这是一个很容易的,但我是C的新手。
答案 0 :(得分:5)
由于C字符串以\0
终止,因此字符串的大小始终为(明显)长度+ 1。
答案 1 :(得分:4)
在此声明中:
char ch[] = "Hello";
以空终止的字符串文字复制到ch
。因此有六个字符,包括NUL终结符。请注意,strlen
将不计算NUL终结符。
char c[] = "Hello";
printf("%s", c);
因此,如果需要字符串大小,则应使用strlen
;如果需要字符串中的字节数,则应使用sizeof
。请注意,如果您有一个字符指针而不是一个数组,它将没有大小信息。
char* ptr = "Hello";
sizeof(ptr); // size of a character pointer
sizeof(*ptr); // size of a char
strlen(ptr);
答案 2 :(得分:3)
C字符串以空值终止。也就是说,在每个字符串的末尾都有一个额外的零字节。
对于它的价值,sizeof(char)
总是 1
。
答案 3 :(得分:2)
C中的字符串总是至少有一个字符:'\ 0'。这个字符位于每个正确的字符串的末尾,因此虽然字符串长度可能是5个字节,但它实际上需要6个字节才能完全存储字符串。
试试这个:
char empty[] = "";
printf("size: %zu\n", sizeof empty);
printf("empty[0]: %hhd\n", empty[0]);