首先是结构的expierences.这个输出为什么会发生?

Jak*_*ter 3 c struct

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

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

输出是:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Run Code Online (Sandbox Code Playgroud)

显然我想要的是在BIG中使用大字母而在SMALL中使用小字母.我试图打印abc.SMALL,它填充正确.

为什么abc.BIG充满了小字母和大字母?

Kni*_*nug 7

BIG并且SMALL有26个字母的空间.但是printf期望最后char *有一个'\0',这意味着字符串需要27个字符的空间.由于没有空格用于终止 - null,编译器不会将其放入BIGSMALL(即使字符串常量确实有一个).

因此printf,不知道字符串BIG结束的位置,也不知道打印结束SMALL.

更改BIGSMALL[27]角色留出空间:

struct letters{
    const char BIG[27];
    const char SMALL[27];
};
Run Code Online (Sandbox Code Playgroud)