logo

사용자 입력을 위한 내장 라이브러리 함수 | sscanf, scanf_s, fscanf_s, sscanf_s

C 프로그래밍 언어는 사용자 입력을 위한 다양한 내장 라이브러리 기능을 제공합니다. 이 기사에서는 C의 sscanf scanf_s fscanf_s sscanf_s 라이브러리 함수에 대해 알아봅니다.

1. C의 sscanf() 함수

sscanf()는 문자열에서 형식화된 입력을 읽는 데 사용됩니다. scanf()와 sscanf() 함수는 모두 비슷합니다. 유일한 차이점은 scanf() 함수는 키보드와 같은 표준 입력에서 사용자의 입력을 읽고 sscanf() 함수는 문자열에서 입력을 읽고 입력을 다른 문자열에 저장한다는 것입니다.

통사론

int   sscanf   ( const char *   str   const char *   format   ...);

매개변수

    str: 데이터를 읽어오고자 하는 문자열을 입력합니다.체재: 유형 지정자를 포함하는 문자열입니다.… (줄임표): 함수가 다양한 개수의 인수를 허용함을 나타냅니다.

반환 값

  • 성공하면 함수는 성공적으로 읽은 값의 수를 반환합니다.
  • 데이터를 성공적으로 읽기 전에 입력이 실패한 경우 EOF가 반환됩니다.

메모 : 이러한 인수는 최소한 형식 지정자에 의해 저장된 값 수만큼 있어야 합니다.



예: sscanf 함수를 설명하는 C 프로그램

C
// C program to illustrate sscanf statement #include  int main() {  // declaring array s  char s[] = '3 red balls 2 blue balls';  char str[10] str2[10];  int i;  // %*s is used to skip a word  sscanf(s '%d %*s %*s %*s %s %s' &i str str2);  printf('%d %s %s n' i str str2);  return 0; } 

산출
3 blue balls 

2. C의 scanf_s() 함수

이 함수는 Microsoft 컴파일러에만 적용됩니다. 버퍼 과부하를 일으키지 않는다는 점을 제외하면 scanf와 동일합니다. scanf_s() 함수는 버퍼 오버플로를 방지할 수 있는 버퍼 크기를 지정하는 추가 매개변수를 제공하므로 scanf() 함수보다 더 안전합니다.

통사론

int   scanf_s  (const char *format [argument]...);

매개변수

    개울: 스트림을 식별하는 파일 개체에 대한 포인터입니다.체재: 유형 지정자를 포함하는 문자열입니다.… (줄임표): 함수가 다양한 개수의 인수를 허용함을 나타냅니다.

메모 : 여기에서는 버퍼 크기를 지정하고 실제로 입력 제한을 제어하여 메모리 오버플로로 인해 전체 애플리케이션이 충돌하지 않도록 할 수 있습니다.

반환 값

  • 성공하면 함수는 읽은 값의 수를 반환합니다.
  • 데이터를 성공적으로 읽기 전에 입력이 실패한 경우 EOF가 반환됩니다.

왜 scanf_s()를 사용하나요?

scanf는 콘솔에서 제공되는 모든 입력을 읽습니다. C는 사용자 입력이 지정한 변수에 맞는지 확인하지 않습니다. color[3]이라는 배열이 있고 문자열 Red에 대해 scanf를 사용하면 문제 없이 작동하지만 사용자가 3자 이상을 입력하면 scanf가 색상 배열에 속하지 않는 메모리에 쓰기 시작합니다.

C는 이것을 포착하거나 경고하지 않으며, 색상 배열에 속하지 않는 메모리 슬롯에 액세스하여 쓰기를 시도하는지 여부에 따라 프로그램이 충돌할 수도 있고 충돌하지 않을 수도 있습니다. 여기가 scanf_s가 작동하는 곳입니다. scanf_s는 사용자 입력이 주어진 메모리 공간에 맞는지 확인합니다.

배열 정렬 자바

메모 : scanf_s()는 Microsoft Visual Studio에서만 작동합니다.

예제 1: sscanf_s 함수를 설명하는 C 프로그램

C
// C program to illustrate sscanf_s statement // scanf_s() will only work in Microsoft Visual Studio. #include  #include  int main() {  char a[5];  // sizeof(a) is buffer size  scanf_s('%s' a sizeof(a));  printf('n%s ' a);  return 0; } 


입력 1

Red

출력 1

Red

입력 2

Yellow

출력 2

No Output

예제 2: 버퍼 크기와 배열 크기 사이의 관계를 설명하는 C 프로그램.

C++
// C++ program // consumes the Enter key // (newline character) pressed after input #include  int main() {  // example  char ch[100000];  printf('Enter characters: ');  scanf_s('%s' ch 99999);  getchar();  return 0; } 
C
// C program // consumes the Enter key // (newline character) pressed after input #include  int main() {  char ch[100000];  printf('Enter characters: ');  scanf_s('%s' ch 99999);  getchar();  return 0; } 
  • 버퍼 크기가 배열 크기보다 작거나 같은 경우 버퍼 크기보다 크거나 같으면 입력하면 초과 데이터가 잘리고 버퍼 크기 - 1까지의 데이터가 읽혀지므로 데이터가 손실됩니다.
  • 버퍼 크기가 배열 크기보다 큰 경우
    • 버퍼 크기보다 작은 값을 입력하면 작동은 되지만 오류가 발생합니다.
    • 버퍼 크기보다 큰 값을 입력하면 버퍼 오버플로가 발생하여 동일한 오류가 발생합니다.

3. C의 fscanf_s() 함수

fscanf()와 fscanf_s()의 차이점은 scanf() 및 scanf_s()의 차이점과 동일합니다. fscanf_s()는 각 c C s S 및 [ ] 유형 필드의 크기가 변수 바로 뒤에 인수로 전달되도록 요구하는 보안 함수입니다.

통사론

int fscanf_s( FILE *stream const char *format [argument ]... );

매개변수

    str: 데이터를 검색하는 데 사용되는 문자열체재: 유형 지정자를 포함하는 문자열… (줄임표): 함수가 다양한 개수의 인수를 허용함을 나타냅니다.

메모 : fscanf_s에는 버퍼 크기를 지정하고 실제로 입력 제한을 제어하는 ​​추가 매개변수가 있습니다.

반환 값

  • 성공하면 함수는 성공적으로 읽은 값의 수를 반환합니다.
  • 데이터를 성공적으로 읽기 전에 입력이 실패한 경우 EOF가 반환됩니다.

메모 : fscanf_s는 MS Visual Studio에서만 작동합니다.

예: fscanf_s 함수를 설명하는 C 프로그램

C
// C program to illustrate fscanf_s statement // This program will run on MS Visual studio #include  #include  int main() {  char s1[10] s2[10] s3[10];  int year;  // file pointer  FILE* fp;  // Open file securely  fopen_s(&fp 'file.txt' 'w+');  fputs('Hello World its 2017' fp);  rewind(fp);  // Using fscanf_s  fscanf_s(fp '%s' s1 sizeof(s1));  fscanf_s(fp '%s' s2 sizeof(s2));  fscanf_s(fp '%s' s3 sizeof(s3));  fscanf_s(fp '%d' &year sizeof(year));  printf('String1 |%s|n' s1);  printf('String2 |%s|n' s2);  printf('String3 |%s|n' s3);  printf('Integer |%d|n' year);  fclose(fp);  return (0); } 


산출

String1 |Hello| String2 |World| String3 |its| Integer |2017|

4. C의 sscanf_s() 함수

sscanf_s()는 sscanf()의 보안 함수이며 보안 함수에서는 각 c C s S 및 [ 유형 필드의 크기가 변수 바로 뒤에 인수로 전달되어야 합니다.

통사론

int   sscanf_s  (const char *  restrict buffer   const char *  restrict format   ...);

매개변수

    str: 데이터를 검색하는 데 사용되는 문자열체재: 유형 지정자를 포함하는 문자열… (줄임표): 함수가 다양한 개수의 인수를 허용함을 나타냅니다.

메모 : sscanf_s에는 버퍼 크기를 지정하고 실제로 입력 제한을 제어하는 ​​추가 매개변수가 있습니다.

반환 값

  • 성공하면 함수는 성공적으로 읽은 값의 수를 반환합니다.
  • 데이터를 성공적으로 읽기 전에 입력이 실패한 경우 EOF가 반환됩니다.

메모 : sscanf_s()는 Microsoft Visual Studio에서만 작동합니다.

예: sscanf_s 함수를 설명하는 C 프로그램

C
// C program to illustrate sscanf_s statement // This program will run on MS Visual studio #include  int main() {  char s[] = '3 red balls 2 blue balls';  char str[10] str2[10];  int i;  // %*s is used to skip a word  sscanf_s(s '%d' &i sizeof(i));  sscanf_s(s '%*d %*s %*s %*s %s' str sizeof(str));  sscanf_s(s '%*d %*s %*s %*s %*s %s' str2  sizeof(str2));  printf('%d %s %s n' i str str2);  return 0; } 


산출

3 blue balls

퀴즈 만들기