1

我只是想用 C 读入一些数据,但我很难让 fread 去做它应该做的事情。我认为这与数据文件的格式有关……这是一个 DOS 文件,我使用 dos2unix 将其更改为 Unix 格式。

以下是相关代码:

    char* temp = calloc(5, sizeof(char));
    while(fread(temp, sizeof(char), 4, in)){
        *(temp + 4) = '\0';
        printf("%s\n", temp);
        ...
    }

数据文件如下所示:

KAAA
KAAF
KAAO
KAAS
KAAT
KABE
KABI
KABQ
...

输出:

KAAA^@

KAA^@
F
KA^@
AO
K^@
AAS
^@
KAAT^@

KAB^@
E
KA^@

...废话

谁能给我一个提示?

4

2 回答 2

1

您只阅读 4 个字符,忘记考虑换行符。一次读取 5 个字符,它应该可以修复它。

char* temp = calloc(5, sizeof(char));
while(fread(temp, sizeof(char), 5, in)){
    *(temp + 4) = '\0';
    printf("%s\n", temp);
    ...
}
于 2012-12-28T20:45:39.553 回答
0

您不会使用表示行尾的(一两个)换行符。在 Unix 上,尝试添加

fgetc(in);

在 Windows 上,

fgetc(in);
fgetc(in);

调用后fread()

于 2012-12-28T20:44:12.573 回答