(C) scanf로 공백으로 입력 받기, scanf_s 보안 경고 해결

C 언어에서 scanf 함수는 사용자로부터 입력을 받습니다. 이 기능과 예제를 사용하는 방법을 알아보세요.

( 내용물 )

    1. 스캔프

    scanf(출력 형식, &변하기 쉬운);

    scanf는 사용자로부터 입력을 받는 함수입니다. 입력 값을 출력 형식으로 받는 방법을 설정하고 변수에 값을 할당합니다. 여기서 &는 변수입니다. 변수 이름이 아닌 변수의 주소를 입력합니다. (&는 변수의 주소를 반환하는 주소 연산자입니다.)

    int i;
    scanf("%d", &i);

    위의 코드는 정수 변수 i에 대한 사용자 값을 받는 코드입니다.

    int i;
        char str(10);
        scanf("%d %s", &i, str);
        
        printf("%d %s", i, str);


    위와 같이 한 번에 여러 데이터 입력을 받을 수도 있습니다.

    변수 이름 자체에 배열에 대한 ‘배열 주소’가 포함되어 있으므로 &를 사용할 필요가 없습니다.

    (배열은 배열의 첫 번째 항목의 주소를 가리킴)

    2. 공백으로 입력 받기

    scanf(“%(^\n)s”, str);

    scanf 함수는 공백을 기준으로 입력을 나눕니다. 따라서 scanf(“%d %s”, &i, str) 가능했습니다.

    그러나 문자열의 경우 공백을 포함하여 입력을 받아야 할 수도 있습니다. 이 경우 (^\n)만 포함하면 됩니다.

    char str(20);
    scanf("%(^\n)s", str);
        
    printf("%s", str);


    3. 스캔프_에스

    이 함수는 scanf에 secure의 약어인 s를 추가합니다.

    scanf는 입력을 그대로 받기 때문에 변수의 크기보다 큰 ‘overflow’가 많이 발생했습니다. 그래서 scanf_s 함수가 나왔는데 scanf_s가 문자형을 받았을 때 size size도 인자로 입력해줘야 합니다.

    scanf_s( “%s”, str, 크기(str) );

    scanf_s는 세 번째 인수만큼 큰 문자열만 허용합니다.

    cf) 에디터 오류

    #define _CRT_SECURE_NO_WARNINGS

    경우에 따라 Microsoft Visual Studio와 같은 엄격한 편집기에서 scanf_s가 사용되지 않는다는 오류가 표시될 수 있습니다. 이 경우 include 문 아래에 위의 코드를 추가하면 해결할 수 있습니다.


    스타가 된 후의 티스토리