c - 将文件读取到 C 中的二维数组

标签 c parsing file-io multidimensional-array

我正在学习 C,我决定制作一个文字游戏作为我的学习项目。所以我正在尝试这个将文本文件读入二维数组的原始“解析器”,但有一个问题:这张 map 不使用 1 个字符宽的单元格,它使用 2 个字符宽的单元格。例如,玩家用**表示,门用##表示等等。

这意味着,我需要读取文本文件的 2 个字符,然后将其分配给 map 中的相应单元格。

嗯,我做了一个测试文件,里面包含

aabbccddee
ffgghhiijj
kkllmmnnoo
ppqqrrsstt
uuvvwwxxyy

我试着用

#include <stdio.h>

#define ROWS 5 
#define COLS 5

int main() {
    FILE *mapfile = fopen("durr", "r");
    char charbuffer[3], row, col, *map[ROWS][COLS];

    /* Initializing array */
    for (row = 0; row < ROWS; row++) {
        for (col = 0; col < COLS; col++) {
            map[row][col] = "  ";
        }
    }

    /* Reading file into array */
    for (row = 0; row < ROWS; row++) {
        for (col = 0; col < COLS; col++) {
            map[row][col] = fgets(charbuffer, 3, mapfile);
        }
    }

    /* Printing array */
    for (row = 0; row < ROWS; row++) {
        for (col = 0; col < COLS; col++) {
            printf("%s", map[row][col]);
        }
        printf("\n");
    }

    fclose(mapfile);    
    return 0;
}

但是当我执行它时,我得到了这个

uuuuuuuuuu
uuuuuuuuuu
uuuuuuuuuu
uuuuuuuuuu
uuuuuuuuuu

我认为这与 fgets 返回一个指针有关,但我不确定。我试着用 fgetc 来做,但它看起来很乱,在阅读了 gets 之后我放弃了它。

最佳答案

您应该已经对从文件中读取的内容进行了 strdup。用这个替换文件读取 block :

/* Reading file into array */
for (row = 0; row < ROWS; row++) {
    for (col = 0; col < COLS; col++) {
        if (fgets(charbuffer, 3, mapfile))
            map[row][col] = strdup(charbuffer);
    }
}

并且不要忘记将其也放在代码的开头:

#include <string.h>

关于c - 将文件读取到 C 中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816161/

相关文章:

java - 读取线程中的解析消息

c - 将数据写入二进制文件,然后读回

ruby - 在每个子目录中创建一个文件

c - read() 读取指针或 write() 写入错误数据?

c - C中的延迟函数不延迟

c - 使用后明确清除/归零敏感变量是否明智?

c - 如何获取内核模块中的真实文件名

c - "printf("%d 的行为");"

regex - 从两个特定字符串之间的任何位置删除特定字符?

xml - Android:使用 ISO-8859-1 编码的 SaxParser 问题