第一次体验结构。这个输出为什么会发生?

时间:2013-10-29 19:09:49

标签: c struct

这是我第一次使用结构体,我无法理解为什么会出现这种结果,有人可以向我解释并说明我做错了吗?

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用小字母和大字母填充?

2 个答案:

答案 0 :(得分:7)

BIGSMALL可以容纳26个字母。但是printf期望最后char * '\0',这意味着该字符串需要27个字符的空格。由于没有空格用于终止null,编译器不会在BIGSMALL中放置一个空格(即使字符串常量确实有一个)。

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

更改BIGSMALL以获得[27]字符的空间:

struct letters{
    const char BIG[27];
    const char SMALL[27];
};

答案 1 :(得分:3)

您没有\0来标记字符串的结尾,因为BIGSMALL只能存储26个字符。像这样增加BIGSMALL的大小:

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

因为,BIGSMALL连续存储在内存中,没有任何内容可以告诉BIG的结尾和SMALL的开头,你得到了集总输出。