gets_s错误C2660"函数不带1个参数" - 非常困惑

时间:2016-12-06 01:48:52

标签: c visual-studio

所以我尽可能彻底地研究了这个问题,但是我无法确定解决方案(非常新的编程)。

基本上我试图读取.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");

感谢所有看过的人,我很欣赏这个问题很明显,但是我对编程很新。非常感谢!

1 个答案:

答案 0 :(得分:0)

gets_s有两个参数,而不是一个。以下是参考:http://en.cppreference.com/w/c/io/gets

您不应该使用此功能。您应该使用fgets。据我了解,getsgets_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