Дополнительный Q в конце ротора [0] [0] .order от ротора [0] [0] .notch. В чем причина этого и что нужно сделать, чтобы избежать этой конкатенации?Правильный способ инициализации массива 2D-структуры char
#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
Вы переходите границу. Это UB (https://en.wikipedia.org/wiki/Undefined_behavior) – Abhineet
Обратите внимание, что неопределенное поведение находится в строке 'printf()', а не в инициализации. Вы зарезервировали 26 байтов для хранения 26 символов; данные не заканчиваются на нуль. Это верно, но это не строка. Это означает, что вы не должны использовать простой '% s' для его печати. Правильно использовать 'printf (« Первый ротор:% .26s \ n », rotor [0] [0] .order);' который ограничивает печать 26 символами, выделенными члену 'order' структуры , Кроме того, вы должны выделить 27 символов для 'order' члена' struct rotor_wirings', что позволяет перестановке нумерации в нуль. –