rotor.order末尾的额外Q来自rotor.notch。造成这种情况的原因是什么,应该采取什么措施来避免这种连接?
#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;
}产出如下:
First rotor is: DMTWSILRUYQNKFEJCAZBPGXOHVQ发布于 2015-07-16 04:46:43
您没有为order字符串末尾的尾空留出空间。它应该是
char order[27];发布于 2015-07-16 04:52:22
您已经编写了所有26个字节,因此没有为终止'\0' char留下任何空间,因此引发了未定义行为。使用27 chars数组,您将获得所需的输出。实例化
struct rotor_wirings
{
char order[27]; // Extra byte for terminating '\0'
char notch[2];
};发布于 2015-07-16 05:04:56
这是一个内存对齐问题,您还没有为order数组声明足够的空间来终止null,以修复以下特定代码:
char order[27];在struct中,如果您想知道为什么会出现这种情况,那么结构就会修复它--尽管这是因为缺口变量地址是在之后对齐的,而printf则找到了空终止。
参考文献:对齐
https://stackoverflow.com/questions/31445491
复制相似问题