scanf()를 사용하여 문자열 크기를 초과하면 안 됩니다.
편집: 수업에 사용해야 합니다.scanf
그래서 다른 입력 방법을 추천하는 것은 제가 찾고 있는 솔루션이 아닙니다(스캔을 수반하는 솔루션이 있는 경우).
작은 프로젝트(예를 들어 게임)의 사용자 입력을 읽고 있는 경우.내가 물어본다고 하자would you like to play?
이렇게 하면yes
또는no
정답.그래서 이렇게 간단한 코드를 적습니다.
#include <stdio.h>
int main(void)
{
char string[3]; //The max number of letters for "yes".
printf("Would you like to play?");
scanf("%s", string);
}
그래서 이 코드는 단순히 그들에게 입력하라고 요구할 것이다.yes
또는no
. 나는 나의 길이를 설정하고 있다.char array
치수에 맞추다3
이렇게 하면 버틸 수 있을 만큼 충분히 크다.yes
그리고 또no
하지만 누군가 다음과 같은 잘못된 입력을 입력했을 경우yesss
이러한 이벤트를 처리하기 위해 나중에 문자열을 비교하는 방법은 알고 있습니다만, 어레이 길이를 초과하기 때문에 기술적으로 또는 잠재적으로 선언한 다른 로컬 변수를 덮어쓰지 않을까요?만약 그렇다면, 3글자를 제한하는 방법이 있을까요?만약 그렇지 않다면, 왜 3사이즈만 입력하는지/어떻게 알 수 있을까요?
어레이는 4개의 어레이를 수용할 수 있어야 합니다.char
s. 0 터미네이터도 포함되어 있어야 합니다.이 고정으로 최대 길이를 포맷으로 지정하면
scanf("%3s", string);
을 보증합니다.scanf
최대 3글자를 읽을 수 있습니다.
사용하는 것이 가장 안전한 방법이다
fgets(string, 4, stdin);
여기에 예약한 공간을 포함하여 최대 3글자를 저장할 수 있습니다.NULL
('\0'
)의 문자입니다.
의 너비 수식자를 사용하여 문자열 크기보다 1 작은 값으로 설정해야 합니다.이것에 의해, 다음의 빈 공간이 확보됩니다.NULL
터미네이터
따라서 "yes"를 저장할 경우 먼저 가지고 있는 어레이보다 더 큰 어레이가 필요합니다.Null 터미네이터의 경우 크기가 4, 3글자 + 1인 어레이입니다.게다가, 당신은 지시해야 한다.scanf()
size를 1자 이내로 읽습니다.여기서 size는 어레이의 길이입니다.이 경우 3은 다음과 같습니다.
#include <stdio.h>
int main(void)
{
char string[4];
scanf("%3s", string);
}
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
"width" 수식어를 사용한다.
%[*][width][modifiers]type
언급URL : https://stackoverflow.com/questions/12306591/read-no-more-than-size-of-string-with-scanf
'programing' 카테고리의 다른 글
C의 3진수(조건부) 연산자 (0) | 2022.08.23 |
---|---|
Java: 하나의 파일에 여러 클래스 선언 (0) | 2022.08.23 |
서버에서 Vuex + Vue 풀 상태를 1회만 실행 (0) | 2022.08.23 |
테스트 스위트에서 Jest + Nuxt + Nuxt-Fire가 실패함 (0) | 2022.08.23 |
시계열 스트림, x축 및 24시간 형식에서 am/pm 제거 (0) | 2022.08.23 |