[자료구조 - C언어] 자료구조 제3강: 문자열 예제
2022. 4. 26. 16:31ㆍCS/자료구조
728x90
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎
1. 문자를 입력받고 출력하기 + 문자 길이
#include <stdio.h>
#include <string.h>
#define BUFFER_SIZE 20
int main(void){
char buffer[BUFFER_SIZE];
while(1){
printf("$ ");
//scanf("%s", buffer); //scanf %s는 공백 단위로 단어 하나씩만 입력받음
//gets(buffer); //gets는 줄바꿈 문자가 나올 때 까지 통째로 읽음
fgets(buffer, BUFFER_SIZE, stdin);
printf("%s:%d\\n", buffer, strlen(buffer ));
}
}
- scanf %s는 공백 단위로 단어 하나씩만 입력받기 때문에 문장을 읽기에 적절하지 않다.
- gets는 줄바꿈 문자가 나올 때까지 통째로 읽기 때문에 문장을 읽기 적합하다.
- warning: this program uses gets(), which is unsafe.
- 컴파일러에 따라서 gets()를 지원하지 않을 수도 있음 → fgets 사용을 추천
- warning: this program uses gets(), which is unsafe.
- fgets는 임의의 파일로부터 데이터를 입력받을 수 있는 함수
- stdin은 fgets가 데이터를 읽어올 파일에 대한 파일 포인터 제공
- 키보드를 표준입력표준 입력 파일이라고도 함: c에서 표준 입력 파일은 stdin
- 표준 입력 파일 포인터는 stdin
- 키보드를 표준입력표준 입력 파일이라고도 함: c에서 표준 입력 파일은 stdin
- 두 번째 매개변수는 첫 번째 매개변수(문자열)에 대한 크기 제공
- gets는 문장의 끝까지 읽기 때문에 사이즈를 초과해서 입력을 받을 수 있어서 문제
- fgets는 배열의 크기를 매개변수로 받기 때문에 어떤 경우에도 그 사이즈를 초과할 수 없다.
- stdin은 fgets가 데이터를 읽어올 파일에 대한 파일 포인터 제공
fgets(buffer, BUFFER_SIZE, stdin);
printf("%s:%d\\n", buffer, strlen(buffer ));
//출력
$ hihi mymy
hihi mymy
:10 //줄이 개행되면서 출력됨: 줄 바꿈 문자까지 문자열에 저장하기 때문 + 줄 바꿈 문자까지 카운트
fgets(buffer, BUFFER_SIZE, stdin);
buffer[strlen(buffer) - 1] = '\0'; //줄바꿈 문자를 NULL로 변경
printf("%s:%d\\n", buffer, strlen(buffer ));
//출력
$ hihi mymy
hihi mymy:9
1-1. 함수를 만들어서 사용하기: 버퍼 사이즈까지만 읽자
int read_line(char str[], int limit){
int ch, i = 0;
while((ch = getchar()) != '\n') //getchar: 한 문자씩 입력, ch는 int
if (i < limit - 1)
str[i++] = ch;
str[i] = '\0';
return i; //return type은 int
}
int len = read_line(buffer, BUFFER_SIZE);
printf("%s:%d\\n", buffer, len);
//출력
$ dgdsdf sd f s a d f gd sdfdsfds
dgdsdf sd f s a d f :20
부경대학교 권오흠 교수님의 [c로 배우는 자료구조 및 여러 가지 예제 실습] 강의 정리입니다. 감사합니다.
https://www.youtube.com/watch?v=7ucjJca3MB4&feature=emb_title
728x90
'CS > 자료구조' 카테고리의 다른 글
[자료구조 - C언어] 자료구조 제5강: 전화번호부 v2.0 (0) | 2022.05.06 |
---|---|
[자료구조 - C언어] 자료구조 제4강: 전화번호부 v1.0 (0) | 2022.04.28 |
[자료구조 - C언어] 자료구조 제2강: 문자열 (0) | 2022.04.25 |
[자료구조 - C언어] 자료구조 제1강: 동적메모리할당 (0) | 2022.04.18 |
[자료구조 - C언어] 자료구조 제1강: C언어에서 포인터, 배열, 포인터 연산 (0) | 2022.04.17 |