数组的第一项未打印正确的值

时间:2019-02-15 02:55:37

标签: c

我正在尝试将代码中故事的多个部分随机化。我将分几部分进行随机化,但是每当我的随机数为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]);

我希望打印驻留数组中第一项的输出为house,但是当我尝试Residence [0]或我的随机数变为0时,输出为红色。

2 个答案:

答案 0 :(得分:2)

声明为[2]的数组可以在位置[0]和位置[1]处容纳2个元素。

当您尝试将某物放置在[2]位置时,您正在破坏内存,结果是不确定的/不可预测的。

答案 1 :(得分:0)

另一种可能的解决方案是让编译器根据存在的初始化程序的数量来确定数组的大小。例如:

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]。