strcpy 一个二进程文件的字节会怎样?

展示一下二进制文件内部是什么:
本质上就是一个个字符。通过一定的文件格式,标准(我觉得就像一些程序)写入到文件中,我们可以通过系统软件去解读它(就像序列化和反序列化)

  • 可执行文件ELF格式(至于ELF究竟是什么,去翻《程序员的自我修养》吧,书上极其详细,而我觉得我这部分看过来却只是一知半解)
    a.out
    图片:pdf
    pdf

视频:mp4

mp4
int fd=open("a.txt",O_RDONLY);
int fd2=open("b.txt",O_WRONLY|O_APPEND);
read(fd,buf,BUFSIZE);
strcpy(buf2,buf);
write(fd2,buf2,BUFSIZE);
如果我们用这样一段代码去复制二进制文件,得到的文件是错误的。
但原因是什么呢?

我收获到的经验是如果想要用buf去复制整个文件,在复制的过程中万万要小心。
这些乱码啊是可能包含’\0’这个空字符的,这意味着我们如果使用strcpy这种通过判断是否到’\0’去复制字符串的函数,是有可能(基本上就会)丢失掉文件一部分的信息。使用memcpy,它是一个字节一个字节复制。就可以避免信息丢失。

猜你喜欢

转载自blog.csdn.net/adlatereturn/article/details/106293203