gpt4 book ai didi

C语言复制文件函数

转载 作者:太空狗 更新时间:2023-10-29 15:57:45 28 4
gpt4 key购买 nike

我尝试使用此功能复制文件,但输出文件包含奇怪的字符。

int File_Copy (char FileSource [], char FileDestination [])
{
int result = -1;
char c [1];
FILE *stream_R = fopen (FileSource, "r");
FILE *stream_W = fopen (FileDestination, "w"); //create and write to file

while ((c [0] = (char) fgetc(stream_R)) != EOF)
{
fprintf (stream_W, c);
}

//close streams
fclose (stream_R);
fclose (stream_W);

return result;
}

不知道哪里出了问题。请帮忙。

最佳答案

问题是 c[1] 不能作为字符串工作,因为它不能包含终止的 nul 字节,所以它应该是

char c[2] = {0};

还有c[2]应该是int,像这样

int c[2] = {0};

因为 fgetc() 返回 int 所以你的代码可能会溢出 c[0],但是你还有一些其他的东西你可以改进。

  1. 你不需要c是一个数组,你可以像这样声明它。

    int c;

    然后使用 fputc(); 代替 fprintf()

  2. 您必须检查所有 fopen() 调用都没有失败,否则您的程序将由于 NULL 指针取消引用而调用未定义的行为。

这是您自己程序的强大版本,您在问题中描述的问题已修复

/*   ** Function return value meaning
* -1 cannot open source file
* -2 cannot open destination file
* 0 Success
*/
int File_Copy (char FileSource [], char FileDestination [])
{
int c;
FILE *stream_R;
FILE *stream_W;

stream_R = fopen (FileSource, "r");
if (stream_R == NULL)
return -1;
stream_W = fopen (FileDestination, "w"); //create and write to file
if (stream_W == NULL)
{
fclose (stream_R);
return -2;
}
while ((c = fgetc(stream_R)) != EOF)
fputc (c, stream_W);
fclose (stream_R);
fclose (stream_W);

return 0;
}

关于C语言复制文件函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079011/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com