关于在二进制模式下使用标准I/O复制文件的有关问题

关于在二进制模式下使用标准I/O复制文件的问题
下面就是我写的代码,可以复制文件,可是程序似乎找不到文件结尾,原来文件的内容复制过去的同时,后面接着是大量的 ‘烫’,这是怎么回事啊?
2. 既然有标准I/O,那非标准I/O是什么 ------自己写的I/O函数?
# include <stdio.h>
# include <stdlib.h>

# define MAX 1024

int main (int argc, char * argv[])
{
FILE * fs, * fd;
char good[MAX];
if (argc != 3)
{
fprintf (stderr, "Usage: %s source_file destination_file", argv[0]);
exit (EXIT_FAILURE);
}
if ((fs = fopen (argv[1], "rb")) == NULL)
{
printf ("Can't open file for read.\n");
exit (EXIT_FAILURE);
}
if ((fd = fopen (argv[2], "wb")) == NULL)
{
printf ("Can't open file for write.\n");
exit (EXIT_FAILURE);
}
fread (good, MAX, 1, fs);
fwrite (good, MAX, 1, fd);


return 0;
}

------解决方案--------------------
1. int nSize = fread (good, MAX, 1, fs);
fwrite (good, nSize, 1, fd);

2. 标准是 C 规定的, 所有的系统通用. 非标准是操作系统自己原始的, 各个操作系统不一样.
------解决方案--------------------
fwrite (good, MAX, 1, fd);
问题出在这里。
如果最后一次fread()读到的数据不足MAX,情况下,
fwrite写入MAX数据就有问题了。

正确的写法参考 #2 楼:
    int nSize = fread (good, MAX, 1, fs);
    fwrite (good, nSize, 1, fd);