在一个小项目上工作,我试图制作一个二维字符数组我以前用过ints,并试图摆脱那个例子,但似乎遇到了一个我不明白的问题。
我就是这么做的:

adjMatrix = (char **) malloc(sizeof(char *) * dimensions);

for (int i = 0; i < dimensions; i++)
    adjMatrix[i] = (char *) malloc(sizeof(char) * (dimensions + 2));

for (int i = 0; i < dimensions; i++)
    for (int j = 0; j < (dimensions + 2); j++)
        adjMatrix[i][j] = '0';

以下是我的显示功能:
    for (int i = 0; i < dimensions; i++)
    {
        for (int j = 0; j < (dimensions + 2); j++)
            printf("%s ", &(adjMatrix[i][j]));

        printf("\n");
    }

这是我的输出
000000 00000 0000 000 00 0
000000 00000 0000 000 00 0
000000 00000 0000 000 00 0
000000 00000 0000 000 00 0

有谁能告诉我为什么它会这样显示,并给出任何建议,如何使它只是一个单一的“0”在每个插槽?

最佳答案

有谁能告诉我为什么它会这样显示,并给出任何建议,如何使它只是一个单一的“0”在每个插槽?
这是因为你建议打印一个字符串而不是一个字符。
将代码更改为:

printf("%c ", adjMatrix[i][j]);

注意,adjMatrix[i]指向单个字符数组,字符数组是字符串。此外,这是未定义的行为,因为您没有0终止“字符串”。
&adjMatrix[i][0]是指向'0' '0' '0' '0' '0' '0'的指针,
&adjMatrix[i][1]是指向'0' '0' '0' '0' '0'的指针,
&adjMatrix[i][2]是指向'0' '0' '0' '0'的指针,

关于c - 在C中分配2D char Matrix的奇数输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52800511/

10-11 18:58