1

我在使用 C 将数据从一个文件传输到另一个文件时遇到问题,我希望社区提供一些帮助来帮助我解决一些输出问题。我这样做是因为我想接下来将 txt 数据转换为二进制数据。完全测试目的。

这是我到目前为止的代码:

int txt2txt()
{
    FILE *pTextFile, *pBinaryFile;
    char buffer[1000];
    pTextFile = fopen ("AS001.txt","r");
    pBinaryFile = fopen("BS001.txt","w");
    while(fgets(buffer,1000,pTextFile)!=NULL){
    fwrite(buffer,sizeof(int),sizeof(buffer),pBinaryFile);
}
fclose(pTextFile);
fclose(pBinaryFile);
return 0;
}

样本输入/输出:

AS001.txt:

91829812
1231231
1231232
123231123
1232312
123123123
12312312

并输出 BS001.txt:

91829812
 „w  O]€©O]    * +  O] ¤O]H¨O] ¬O](     O]   @¨O]Lü( ¾8„w8O]š8„w¥ex      O]ˆ©O]  O]8¤O]          ¤O] ¤O]H¨O]`žO]H     O]    8¤O]œü( ¾8„w8O]š8„wuex      O]@¤O]   ЪO]Q      ø    H¨O]PO] ¬O]  O]PO]™Qº€O]PO]  D  Q  Q    ¬O]            Q   ˆ       p¨O] ¬O]Õqˆw¹Qºþÿÿÿ|O]   
4

2 回答 2

2

这段代码:

while(fgets(buffer,1000,pTextFile)!=NULL){
    fwrite(buffer,sizeof(int),sizeof(buffer),pBinaryFile);
}

尝试读取 1000 个字节,然后1000 * sizeof(int)每次迭代写入字节。除非您的系统有 1 字节整数(不太可能),否则这可能不是您想要的。

除此之外,fgets可能还没有填满你的整个缓冲区——它停在换行符处。

利用:

while (fgets(buffer, 1000, pTextFile) != NULL)
{
    fwrite(buffer, 1, strlen(buffer), pBinaryFile);
}

编辑:由于您遇到问题,这是一个完整的示例。一、源码:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char buffer[1000];
    FILE *pTextFile = fopen("AS001.txt","r");
    FILE *pBinaryFile = fopen("BS001.txt","w");

    while (fgets(buffer, 1000, pTextFile) != NULL)
    {
        fwrite(buffer, 1, strlen(buffer), pBinaryFile);
    }

    fclose(pTextFile);
    fclose(pBinaryFile);

    return 0;
}

二、构建&运行:

$ make example
cc     example.c   -o example
$ cat AS001.txt 
91829812
1231231
1231232
123231123
1232312
123123123
12312312

$ ./example 
$ diff AS001.txt BS001.txt 
$ 
于 2013-06-07T20:12:10.583 回答
0

包含标准库中的 string.h 并将您的写入命令更改为:

fwrite(buffer, sizeof(char), strlen(buffer), pBinaryFile);

这将阻止它尝试将垃圾数据写入缓冲区的其余部分,这是未定义的。

于 2013-06-07T20:48:52.463 回答