这是我第一次使用结构,我不明白为什么这个输出正在发生,有人可以向我解释并说出我做错了吗?
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充满了小字母和大字母?
BIG并且SMALL有26个字母的空间.但是printf期望最后char *有一个'\0',这意味着字符串需要27个字符的空间.由于没有空格用于终止 - null,编译器不会将其放入BIG或SMALL(即使字符串常量确实有一个).
因此printf,不知道字符串BIG结束的位置,也不知道打印结束SMALL.
更改BIG并SMALL为[27]角色留出空间:
struct letters{
const char BIG[27];
const char SMALL[27];
};
Run Code Online (Sandbox Code Playgroud)