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
'지식인 문제풀이C_C++_파이썬' 카테고리의 다른 글
C언어 종료 입력시까지 최대값,최소값,합,평균 구하기 (0) | 2022.09.03 |
---|---|
가장작은수와 두번째 작은수 순차탐색 (0) | 2022.09.03 |
댓글