Странный вывод после назначения нового символа - PullRequest
0 голосов
/ 20 октября 2018

Это мой код [ПРИМЕЧАНИЕ: не полный код, но только они вызывают проблемы]

#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 голосов
/ 20 октября 2018

В строке, где вы размещаете новую строку, вы не инициализировали ее.Всякий раз, когда вы выделяете ресурсы, рекомендуется инициализировать хранилище с известным значением.Например,

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

К

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

Обратите внимание, что вы фактически разыменовали исходное значениестроки.В вашем простом случае это буквальное значение, поэтому это не имеет значения.Если вы выполняете этот код во второй раз, вы откажетесь от ссылки на предыдущую строку и создадите утечку памяти.В этом случае вы должны использовать free() предыдущую ссылку, чтобы избежать других проблем с выделением памяти.

...