C语言fgets函数总提示有错怎么办

qq2207099072 2016-10-03 10:40:18
源代码如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX 256
FILE*Get_file(char*file,char*mode)
{
char file_name[MAX];
FILE*i;
printf("请输入%s文件名\n", file);
if (gets(file_name) == NULL)
fprintf(stderr, "error %s", file);
if (i = fopen(file_name, mode) == NULL)
{
perror(file_name);
}
return i;
}
int main(void)
{
FILE*input;
FILE*output;
int buffer[MAX];
input = Get_file("input","r");
output = Get_file("output","w");
while (fgets(buffer, MAX, input) != NULL)
{
fputs(buffer, output);
}
fclose(input);
fclose(output);
return EXIT_SUCCESS;
}
目的很简单,就是从一个txt文件往另一个txt文件里复制东西
我在H盘建立了一个名为1.txt和2.txt的文件,从1往2复制东西
但在输入文件名‪H:\\1.txt和‪H:\\2.txt后敲击回车却显示如下

请问错误出在哪里

...全文
1158 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdgdf566 2018-09-18
  • 打赏
  • 举报
回复
fgets有max
新标准剔除了gets
qq_35578084 2016-10-22
  • 打赏
  • 举报
回复
用CreateFile和ReadFile,WriteFile
赵4老师 2016-10-20
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
palkiver 2016-10-20
  • 打赏
  • 举报
回复
不要使用诸如fgets、gets之类的获取字符串的函数,因为这些函数不能检查或者是限定输入字符串的长度。 比如我懂一些内存结构,还懂一些机器代码,我就可以输入特定的字符串来篡改你的内存,从而运行我想要的功能,历史上的蠕虫病毒就是这么来的。
小灸舞 2016-10-10
  • 打赏
  • 举报
回复
你这个打开文件失败了,所以是stream.valid() 而且你这个fgets的第一个参数不对。
fefe82 2016-10-04
  • 打赏
  • 举报
回复
if ((i = fopen(file_name, mode)) == NULL)
paschen 2016-10-03
  • 打赏
  • 举报
回复
fgets 第一个参数需要的类型是char*,而不是int类型数组或指针
wang547445573 2016-10-03
  • 打赏
  • 举报
回复
有明显错误有两个 1.查看一下fgets第一个参数类型 2.空指针 input =Get_file("input","r"); input是NULL,fget 从一个不存在的文件读取内容,自然就会异常。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧