2016-12-06 1 views
1

그러나이 문제를 철저히 조사한 결과 해결책을 찾을 수 없었습니다.gets_s 오류 C2660 "함수가 인수를 취하지 않습니다."- 매우 혼동했습니다.

기본적으로 .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은 모두 버퍼 오버 플로우를 막지 못한다는 것을 알고 있습니다.

fgets를 gets과 같이 사용하려면 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을 사용하는 것이 좋습니다.

관련 문제