This question already has an answer here:
Garbage Value in File after write
                                
                                    (1个答案)
                                
                        
                                2年前关闭。
            
                    
我试图在读取,写入和打开的帮助下将c中两个输入文件的内容复制到文件中。最初,我试图仅复制一个包含“ hello”世界的文件的内容,但这就是写入的内容:
“你好
h«Ú^?^ @ ^ @ ^ A ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ m G«Ú^?^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ Pjh«Ú^?^ @ ^ @ ^ A ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ A ^ @ ^ @ ^ @þ^?^ @ ^ @° h«Ú^?^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ H h«Ú^?^ @ ^ @ P)»Ó

我的代码是:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main(int argc , char *argv[]){
int fd1,fd2,fdout;
int fread1, fread2;
char buff[128];
int fconf(int f1, int f3){
fd1 = open(argv[1],O_RDONLY);

fdout = open(argv[2],O_RDONLY | O_CREAT | O_APPEND | O_RDWR);
fread1 = read(fd1,buff,sizeof(buff));
write(fdout,buff,sizeof(buff));
 close(fd1);
 close(fdout);
 return 0;
 }
}


我不知道为什么会这样。

最佳答案

您的输入文件可能少于128个字节。但是,您始终尝试将缓冲区中的所有128个字节写入输出文件。读取后的字节是未初始化的垃圾。

使用read的返回值可以知道您实际获得了多少个字节。

关于c - 用open(),read()和write()写入错误的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46875414/

10-11 23:09
查看更多