首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化2D结构字符数组的正确方法

初始化2D结构字符数组的正确方法
EN

Stack Overflow用户
提问于 2015-07-16 04:41:31
回答 4查看 59关注 0票数 0

rotor.order末尾的额外Q来自rotor.notch。造成这种情况的原因是什么,应该采取什么措施来避免这种连接?

代码语言:javascript
复制
#include <stdio.h>

struct rotor_wirings
{
    char order[26];
    char notch[2];
};
/* rotor[MODEL][ROTORNAME] */
struct rotor_wirings rotor[10][10] =
{
    /* Commercial Enigma A, B */
    {
        { "DMTWSILRUYQNKFEJCAZBPGXOHV", "Q" },
        { "HQZGPJTMOBLNCIFDYAWVEUSRKX", "E" }
    }
};

int main()
{
    printf("First rotor is: %s\n", rotor[0][0].order);
    return 0;
}

产出如下:

代码语言:javascript
复制
First rotor is: DMTWSILRUYQNKFEJCAZBPGXOHVQ
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-16 04:46:43

您没有为order字符串末尾的尾空留出空间。它应该是

代码语言:javascript
复制
char order[27];
票数 3
EN

Stack Overflow用户

发布于 2015-07-16 04:52:22

您已经编写了所有26个字节,因此没有为终止'\0' char留下任何空间,因此引发了未定义行为。使用27 chars数组,您将获得所需的输出。实例化

代码语言:javascript
复制
struct rotor_wirings
{
    char order[27]; // Extra byte for terminating '\0'
    char notch[2];
};
票数 0
EN

Stack Overflow用户

发布于 2015-07-16 05:04:56

这是一个内存对齐问题,您还没有为order数组声明足够的空间来终止null,以修复以下特定代码:

代码语言:javascript
复制
char order[27];

在struct中,如果您想知道为什么会出现这种情况,那么结构就会修复它--尽管这是因为缺口变量地址是在之后对齐的,而printf则找到了空终止。

参考文献:对齐

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31445491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档