这是我的代码[注意:不是完整的代码,只有这些会导致问题]
#define RNC 3
int main(int argc, const char *argv[])
{
char *labyrinth[RNC + 2] = {
"00000",
"01100",
"00101",
"01111",
"00101",
};
char *markedLabyrinth[RNC + 2] = {
"00000",
"00000",
"00000",
"00000",
"00000",
};
printf("Test = %s\n", markedLabyrinth[1]);
printf("Please specific where is the exit point Ex. [ 3 5 ] : ");
scanf("%d %d", &K, &L);
int i, row, column;
markedLabyrinth[1] = (char *)malloc(sizeof(char) * 6);
markedLabyrinth[1][2] = '1';
printf("Test After = %s\n", markedLabyrinth[1]);
}
。
这是我的编译器的输出
Test = 00000
Please specific where is the exit point Ex. [ 3 5 ] : 3 4 // this is my input, [ignore it ^^]
Test After = @q1
正如您所看到的,我尝试仅将 markLabyrinth [1] [2]分配为='1',并且输出应为
Test After = 00100
但是它给了我
Test After = @q1
请帮我看看这段代码,谢谢
答案 0 :(得分:1)
在分配新字符串的行中,尚未初始化它。每次分配时,将存储初始化为已知值都是一个好习惯。例如,
markedLabyrinth[1] = (char *)malloc(sizeof(char) * 6);
收件人
markedLabyrinth[1] = (char *)malloc(sizeof(char) * 6);
strcpy(markedLabyrinth[1], "00000");
请注意,尽管您已经有效地取消引用了字符串的原始值。在您的简单情况下,它是一个文字,所以没关系。如果您第二次执行此代码,则将放弃对前一个字符串的引用,并会导致内存泄漏。在这种情况下,您应该使用先前的参考文献free()
来避免内存分配方面的其他问题。