본문 바로가기
지식인 문제풀이C_C++_파이썬

scanf_s입력 문자열 오류에 대해서

by 코드덕후 2022. 9. 3.
728x90

scanf의 함수원형은 scanf와 같지만 문자열을 입력할때는 버퍼의 길이를 넣어줘야합니다.

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

 

#include <stdio.h>

int main(void) {

    char a, b, c;
    char str[30];
    scanf_s("%s %c %c %c", str, &a, &b, &c);

    return 0;
}

위의 소스는 scanf에서는 정상작동하지만 scanf_s에서는 문제가 발생합니다.

scanf_s는 scanf의 문제점을 보완하기 위한 함수로 문자또는 문자열입력시 버퍼의 크기-1의 크기를 입력해줘야합니다.

널문자를 처리하기위해 마지막 자리는 빼주는 것입니다.

문자 또는 문자열입력시 버퍼또는 바이트단위의 크기를 입력해줘야합니다.

#include <stdio.h>

int main(void) {

    char a, b, c;
    char str[30];
    scanf_s("%s %c %c %c", str, 30, &a, 1, &b, 1, &c, 1);

    return 0;
}

이와같이 문자버퍼의 크기를 넣어줘야 합니다.

https://kin.naver.com/qna/detail.naver?d1id=1&dirId=1040101&docId=427527993 

 

c언어 오류

문자를 입력받고 그 문자의 길이가 얼마인지 알아내는 코드를 짰는데 혹시 아래 코드에서 잘못된것이 있을까요?? 계속 실행이 안되네요..ㅠㅠㅜ#include <stdio.h>...

kin.naver.com

문자를 입력받고 그 문자의 길이가 얼마인지 알아내는 코드를 짰는데  혹시 아래 코드에서 잘못된것이 있을까요?? 계속 실행이 안되네요..ㅠㅠㅜ

#include <stdio.h>

int main()
{
    int i = 0;
    char arr[50];

    scanf_s("%s", &arr);

    while (arr[i]!= '\0')
    {
        printf("%c", arr[i]);
        i++;
    }

    printf("입력하신 단어의 길이는 %d입니다", i);


    return 0;
}

여기에서는 _s를 사용했지만 문자열버퍼의 크기를 입력하지 않았고 배열포인터를 쓰는데 

&연산자를 붙여주어서 문제가 발생했습니다.

 

#include <stdio.h>

int main()
{
    int i = 0;
    char arr[50];

    //< 문자열입력시 주소를 빼고 입력받아야합니다.
    //< _s는 문자열의 길이도 넣어줘야합니다.
    scanf_s("%s", arr,49);

    while (arr[i] != '\0')
    {
        printf("%c", arr[i]);
        i++;
    }

    printf("입력하신 단어의 길이는 %d입니다", i);


    return 0;
}

 

정상적으로 출력되는 것을 알수 있습니다.

_s류의 함수를 사용할경우 버퍼의 크기를 요구하는 경우가 많으니 이점 참고하세요~

 

#scanf_s사용법 #scanf_s오류 #scanf_s문자열 

728x90
반응형
LIST

댓글