Friday, March 23, 2007
C언어] gets, fgets 함수로, 키보드 문자(문자열) 입력 받기; String Input
gets 는 입력받는 문자열 길이를 제한할 수 없어서 보안에 취약하므로.
fgets() 함수를 사용해야 합니다.
fgets() 는 텍스트 파일을 1행씩 읽을 때 사용하지만, 표준입력 쉽게 말해서 키보드 입력도 일종의 "가상 파일"이기에
stdin 이라는 이름을 지정하면, 키보드를 파일 삼아 읽을 수 있습니다.
소스 파일명: example.cpp
컴파일 및 실행 결과 화면:
위의 소스의 경우에는 입력받은 문자열 끝에 개행문자가 붙어 있습니다.
이 소스는 그 개행문자를 지웁니다.
fgets() 함수를 사용해야 합니다.
fgets() 는 텍스트 파일을 1행씩 읽을 때 사용하지만, 표준입력 쉽게 말해서 키보드 입력도 일종의 "가상 파일"이기에
stdin 이라는 이름을 지정하면, 키보드를 파일 삼아 읽을 수 있습니다.
사용자 문자열 입력 예제 소스
소스 파일명: example.cpp
#include <stdio.h>
int main(void) {
// 끝의 "+ 1" 은 null 문자 1개의 길이
// 실제는 총50바이트의 문자열
char s[50 + 1];
printf("아무 문자열이나 입력하세요: ");
fgets(s, sizeof(s), stdin);
printf("방금 입력받은 문자열: %s\n", s);
return 0;
}
int main(void) {
// 끝의 "+ 1" 은 null 문자 1개의 길이
// 실제는 총50바이트의 문자열
char s[50 + 1];
printf("아무 문자열이나 입력하세요: ");
fgets(s, sizeof(s), stdin);
printf("방금 입력받은 문자열: %s\n", s);
return 0;
}
컴파일 및 실행 결과 화면:
D:\Z>cl /nologo example.cpp && example.exe
example.cpp
아무 문자열이나 입력하세요: eehwhwh
방금 입력받은 문자열: eehwhwh
D:\Z>cl /nologo example.cpp && example.exe
example.cpp
아무 문자열이나 입력하세요: egegeegegeegegeggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggg
방금 입력받은 문자열: egegeegegeegegeggggggggggggggggggggggggggggggggggg
D:\Z>
example.cpp
아무 문자열이나 입력하세요: eehwhwh
방금 입력받은 문자열: eehwhwh
D:\Z>cl /nologo example.cpp && example.exe
example.cpp
아무 문자열이나 입력하세요: egegeegegeegegeggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggg
방금 입력받은 문자열: egegeegegeegegeggggggggggggggggggggggggggggggggggg
D:\Z>
fgets 개행문자 없이
위의 소스의 경우에는 입력받은 문자열 끝에 개행문자가 붙어 있습니다.
이 소스는 그 개행문자를 지웁니다.
#include <stdio.h>
#include <string.h> // strlen()
int main(void) {
// 끝의 개행문자 2개의 공간 포함
// 실제는 총50바이트의 문자열
char s[50 + 2];
printf("아무 문자열이나 입력하세요: ");
fgets(s, sizeof(s), stdin);
// fgets 는 개행문자를 붙이기에
// 개행문자를 제거해야 함
s[strlen(s)-1] = '\0';
printf("방금 입력받은 문자열: <%s>\n", s);
return 0;
}
#include <string.h> // strlen()
int main(void) {
// 끝의 개행문자 2개의 공간 포함
// 실제는 총50바이트의 문자열
char s[50 + 2];
printf("아무 문자열이나 입력하세요: ");
fgets(s, sizeof(s), stdin);
// fgets 는 개행문자를 붙이기에
// 개행문자를 제거해야 함
s[strlen(s)-1] = '\0';
printf("방금 입력받은 문자열: <%s>\n", s);
return 0;
}
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home