일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- HTML #CSS
- 잔
- BOJ #컴퓨터공학 #C++ #알고리즘 #자료구조
- 컴퓨터공학 #Java #자바 #클래스 #객체 #인스턴스
- 컴퓨터공학 #자료구조 #스택 #c++ #알고리즘 #백준문제풀이
- 컴퓨터공학 #c #c언어 #문자열입력
- Today
- Total
영벨롭 개발 일지
[C언어]문자열 입력 함수: scanf(), gets(), fgets() 본문
c언어로 문자열을 입력받을 때 사용할 수 있는 함수는 scanf(), gets(), fgets()가 있습니다.
세 함수의 헤더파일은 모두 stdio.h입니다.
각 함수의 예시를 돕기 위해 문자열 변수의 이름을 임의로 str이라고 칭하겠습니다.
- scanf("%s", str)
먼저 scanf() 함수를 보겠습니다.
scanf()함수로 문자열을 입력할 시, 공백(스페이스바 또는 엔터키)단위로 문자열을 입력받습니다.
즉, 공백을 포함하지 않는 문자열을 입력할 수 있습니다.
예를 들어 hello world를 입력하여도 hello만 str에 입력됩니다.
다음은 예제 코드입니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
char str[128];
scanf("%s", str);
printf("%s", str);
return 0;
}
입력: hello world
출력: hello
- gets(str, sizeof(str))
다음으로 살펴 볼 함수는 gets() 함수입니다.
gets() 함수는 scanf() 함수와 달리 문자열을 공백 단위로 끊지 않고 줄바꿈이 일어날 시 문자열 끝에 \0이 붙여집니다.
즉, 공백을 포함한 문자열을 입력할 수 있습니다.
단, gets()는 크기 제한이 없는 함수이기 때문에 에러가 발생할 가능성이 있습니다.(두 번째 parameter인 문자열 크기 생략 가능)
다음은 예제 코드입니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
char str[128];
gets(str, sizeof(str));
printf("%s", str);
return 0;
}
입력: hello world
출력: hello world
- fgets(str, sizeof(str), stdin)
fgets() 함수는 scanf() 함수와 마찬가지로 공백을 포함한 문자열을 입력받을 수 있습니다.
fgets() 로 문자열을 입력받을 시 총 3개의 parameter가 필요합니다.
첫 번째 parameter(str)는 문자열에 대한 포인터를 받고,
두 번째 parameter(sizeof(str))는 문자열의 최대 크기를 받고,
세 번째 parameter(stdin)은 문자열을 입력 받을 stream을 받습니다.
stdin은 표준입력장치(키보드)에서 입력받겠다는 것을 의미합니다.
fgets() 함수를 사용할 때 주의해야할 점은 줄바꿈이 발생할 때 줄바꿈 문자(\n)도 문자열에 포함되기 때문에 문자열을 입력한 후, 문자열의 마지막 문자를 '\0'으로 바꿔줍니다.
다음은 예제 코드입니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main(void) {
char str[128];
fgets(str, sizeof(str), stdin);
printf("%s\n", str);
printf("%d\n", strlen(str));
str[strlen(str) - 1] = '\0'; //줄바꿈 문자 제거
printf("%s\n", str);
printf("%d", strlen(str));
return 0;
}
입력: hello world
출력: hello world
12
hello world
11
'Programming Language > C & C++' 카테고리의 다른 글
[C++]STL 해시 테이블 unordered_set과 unordered_map (0) | 2022.04.26 |
---|---|
[C++]순열 next_permutation STL 사용하기 (0) | 2022.03.31 |
[C++]std::array 클래스 사용법 (0) | 2022.03.29 |
[C++]system() 함수 - 몇 가지 명령어 사용해보기 (0) | 2022.03.06 |
[C++] string 라이브러리 사용법 (0) | 2022.02.21 |