一个单词被写入2D数组的第0行和第0列。当我调整数组大小以准备存储另一个单词时,我将该单词存储在第0行和第0列中的temp变量中。在我调用增加2D数组大小的函数后,临时变量变成了非常奇怪的东西。例如,我传入了“ i”,然后增加行的大小后,存储i的变量temp发生了变化。为什么会这样?
void make_row_decode_structure_bigger(int rows){
printf("inside the making the rows bigger \n");
int max_rows = rows+1;
char **store = realloc( decode_structure, sizeof *decode_structure * (rows + 2) );
printf("after a store has been assigned\n");
if (store){
decode_structure = store;
for(size_t i = 0; i < 2; i++ ){
decode_structure[rows + i] = calloc(20, sizeof(char));
}
}
printf("end of making the rows increase\n");
return;
//decode_structure[max_rows][0] = '\0';
}
//other part of code
char* temp;
strncpy(temp, decode_structure[0], 20);
printf("this word %s is at the top of decode_structure\n", temp);
printf("make the rows bigger is being called\n");
make_row_decode_structure_bigger(num);
printf("temp after make_row_decode_structure_biggeris called %s \n", temp);
这是输出:
这个词我在decode_structure的顶部 使行更大被称为 里面使行更大 分配商店后 增加行数的结尾 make_row_decode_structure_biggeris之后的温度称为««
答案 0 :(得分:2)
这里:
char* temp;
strncpy(temp, decode_structure[0], 20);
您使用未初始化的指针作为副本的目标,该指针将调用未定义行为(UB)。
改为使用char temp[20];
,或者如果您确实想要一个指针,则使用malloc动态分配由指针指向的内存,如下所示:char* temp = malloc(sizeof(char) * 20);
。