分配新字符后输出奇怪

时间:2018-10-20 11:26:32

标签: c arrays pointers struct char

这是我的代码[注意:不是完整的代码,只有这些会导致问题]

#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

请帮我看看这段代码,谢谢

1 个答案:

答案 0 :(得分:1)

在分配新字符串的行中,尚未初始化它。每次分配时,将存储初始化为已知值都是一个好习惯。例如,

markedLabyrinth[1] = (char *)malloc(sizeof(char) * 6);

收件人

markedLabyrinth[1] = (char *)malloc(sizeof(char) * 6);
strcpy(markedLabyrinth[1], "00000");

请注意,尽管您已经有效地取消引用了字符串的原始值。在您的简单情况下,它是一个文字,所以没关系。如果您第二次执行此代码,则将放弃对前一个字符串的引用,并会导致内存泄漏。在这种情况下,您应该使用先前的参考文献free()来避免内存分配方面的其他问题。