3

这是我第一次使用结构,我不明白为什么会发生这种输出,有人可以向我解释并告诉我做错了什么吗?

struct letters {
        const char BIG[26];
        const char SMALL[26];
};
struct letters abc = { .BIG = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", .SMALL = "abcdefghijklmnopqrstuvwxyz" };
printf("%s", abc.BIG);

输出是:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

显然,我想要的是在 BIG 中使用大字母,在 SMALL 中使用小字母。我尝试打印 abc.SMALL,它已正确填写。

为什么 abc.BIG 中同时充满了大小写字母?

4

2 回答 2

7

BIG并且SMALL有正好 26 个字母的空间。但printf期望 achar *以 a'\0'结尾,这意味着字符串需要 27 个字符的空间。由于 terminating-null 没有空间,编译器不会在BIGor中放入一个SMALL(即使字符串常量确实有一个)。

因此printf不知道字符串在哪里BIG结束并最终打印SMALL

更改BIGSMALL[27]字符留出空间:

struct letters{
    const char BIG[27];
    const char SMALL[27];
};
于 2013-10-29T19:12:32.383 回答
3

您不必\0标记字符串的结尾,因为BIG并且SMALL只能存储 26 个字符。BIG像这样增加大小SMALL

const char BIG[27];
const char SMALL[27];

由于BIGSMALL连续存储在内存中,没有什么可以告诉你的结束BIG和开始SMALL,你得到的是集中输出。

于 2013-10-29T19:12:57.617 回答