C中字符的大小

时间:2013-12-27 06:13:02

标签: c char sizeof

我有:

#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的新手。

4 个答案:

答案 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]);