scanf()
다음과 같이 다른 변수에 대해 사용자로부터 입력을받는 간단한 C 프로그램을 작성했습니다 .
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
이에 대한 출력은 예상대로 완전히 정상적으로 제공됩니다.
input: 10 23
output: 10
23
그러나 다음과 같이 문자열 배열에 대한 입력을 시도했습니다 (여기 char c[2]
에 문자열 배열입니다).
#include <stdio.h>
int main(){
int a, b;
char c[2];
scanf("%d %d %s", &a, &b, c);
printf("%d\n",a);
printf("%d\n",b);
printf("%s\n",c);
return 0;
}
이제 출력은 예상치 못한 것이 었습니다.
input: 10 23 AM
output: 10
0
AM
이 알 수있는 바와 같이, 여기서, 변수 인쇄 값이 존재한다는 b
것으로 오는 0
대신 예상 23
. 문자열 배열에 대한 입력을 받으면 변수 값이 b
어떻게 변경 됩니까?
누군가 내가 무엇을 잘못했는지 (물론 어리석은 실수) 알아낼 수 있습니까? 강조된 텍스트
귀하의 char c[2];
변수는 2 문자열 보유 할만큼 충분히 큰 배열이 아닌 플러스 필요한 nul
-terminator을 . 입력이 2 자 이하 라는 것을 알고 있는 경우로 변경하면 char c[3];
충분합니다. 그러나 안전성을 높이기 위해 다음 scanf
과 같은 형식 지정자를 사용하여 %2s
(또는보다 일반적으로 해당 형식 지정자 char buff[n];
의 값을 사용하는 것과 같은 배열의 경우) 호출에서 읽을 문자 수에 대한 제한을 포함 할 수 있습니다 n - 1
.
현재로서는 정의되지 않은 동작 이 있습니다. 여기에는 ( - 종결자가 b
되어야하는 0으로) 주어진 값을 덮어 쓰는 것이 포함될 수 있습니다 nul
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다