[자료구조 - C언어] 자료구조 제3강: 문자열 예제

2022. 4. 26. 16:31CS/자료구조

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 사용을 추천
  • fgets는 임의의 파일로부터 데이터를 입력받을 수 있는 함수
    • stdin은 fgets가 데이터를 읽어올 파일에 대한 파일 포인터 제공
      • 키보드를 표준입력표준 입력 파일이라고도 함: c에서 표준 입력 파일은 stdin
        • 표준 입력 파일 포인터는 stdin
    • 두 번째 매개변수는 첫 번째 매개변수(문자열)에 대한 크기 제공
      • gets는 문장의 끝까지 읽기 때문에 사이즈를 초과해서 입력을 받을 수 있어서 문제
      • 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