2016-12-06 56 views
1

所以我已经彻底研究了这个问题,但我一直无法找到一个解决方案(编程非常新)。gets_s错误C2660“功能不需要1个参数” - 非常困惑

基本上我试图读取.txt文件,但是一旦我要求用户输入文件的名称与get_s函数,我得到错误C2660-“错误C2660:'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

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机器上或在我的FreeBSD服务器上找到stdio.h。它似乎不是标准的,所以我会建议使用fgets