Первый член массива не печатает правильное значение - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь рандомизировать несколько частей истории в коде.Есть несколько частей, которые я буду рандомизировать, но всякий раз, когда мое случайное число равно 0, первые элементы в каждом массиве не печатают правильное значение.

srand(time(NULL));

int random = rand() % 3;

const char *residence[2];
residence[0] = "house";
residence[1] = "apartment";
residence[2] = "trailer";

const char *color[2];
color[0] = "green";
color[1] = "purple";
color[2] = "red";

printf("%s", residence[0]);

Я ожидал вывода печати первого элемента вмассив резиденций должен быть домом, но когда я пытаюсь указать место жительства [0] или мое случайное число, равное 0, выводится красным.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Другое возможное решение может заключаться в том, чтобы компилятор определял размер массива на основе количества присутствующего инициализатора.Например:

const char *residence[] = {"house", "apartment", "trailer"};
const char *color[] = {"green", "purple", "red"};

srand(time(NULL));(

int random = rand() % (sizeof(residence) / sizeof(char *));

printf("%s", residence[0]);

Выражение (sizeof (Residence) / sizeof (char *)) автоматически вычисляет номер модуля на основе количества инициализаторов в массиве.Таким образом, вы можете просто добавить больше «элементов» в ваш массив, не беспокоясь о [x] в объявлении массива.

0 голосов
/ 15 февраля 2019

Массив, объявленный [2], может содержать 2 элемента в позиции [0] и позиции [1].

Когда вы пытаетесь поместить что-либо в позицию [2], вы повреждаете память, ирезультаты не определены / непредсказуемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...