这是我第一次使用结构体,我无法理解为什么会出现这种结果,有人可以向我解释并说明我做错了吗?
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用小字母和大字母填充?
答案 0 :(得分:7)
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];
};
答案 1 :(得分:3)
您没有\0
来标记字符串的结尾,因为BIG
和SMALL
只能存储26个字符。像这样增加BIG
和SMALL
的大小:
const char BIG[27];
const char SMALL[27];
因为,BIG
和SMALL
连续存储在内存中,没有任何内容可以告诉BIG
的结尾和SMALL
的开头,你得到了集总输出。