programing

scanf()를 사용하여 문자열 크기를 초과하면 안 됩니다.

copyandpastes 2022. 8. 23. 22:56
반응형

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개의 어레이를 수용할 수 있어야 합니다.chars. 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

반응형