所以我尽可能彻底地研究了这个问题,但是我无法确定解决方案(非常新的编程)。
基本上我试图读取.txt文件,但是当我要求用户输入带有get_s函数的文件名时,我得到错误C2660 - "错误C2660:&#39 ; gets_s':函数不带1个参数"。
以下是我的代码示例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
FILE *fileread1;
char file1[10];
char read_char1;
char ch;
{
printf("Enter a filename : ");
gets_s("file1.txt");
fileread1 = fopen("file1.txt", "r");
感谢所有看过的人,我很欣赏这个问题很明显,但是我对编程很新。非常感谢!
答案 0 :(得分:0)
gets_s
有两个参数,而不是一个。以下是参考:http://en.cppreference.com/w/c/io/gets。
您不应该使用此功能。您应该使用fgets
。据我了解,gets
和gets_s
都不能防止缓冲区溢出。
要像使用gets
那样使用fgets,只需将stdin
作为输入文件指针传递即可。这是一个用法示例:
char buffer[100];
fgets(buffer, 100, stdin);
以下是fgets
的一个很好的资源,详细介绍了https://www.freebsd.org/cgi/man.cgi?query=fgets&sektion=3
经过一些研究,gets_s
似乎是gets
的一个版本,可以防止缓冲区溢出,但我无法在我的OSX机器上的stdio.h
中找到它我的FreeBSD服务器。它似乎不是标准的,所以我建议使用fgets
。