<개인공부>/[C언어, C++]

[C언어/C++] gets, puts 문자열 입출력 함수에 대해서.

BlockDMask 2019. 4. 15. 16:39
반응형

안녕하세요. BlockDMask 입니다.

오늘은 C언어, C++에서 char*, char[] 스타일의 문자열을 입출력 받는 gets, puts 함수를 알아보겠습니다.

지난시간에는 문자를 다루는 getchar, putchar 두 함수에 대해서 알아봤습니다.

C++문자열관련해서 string의 전부를 보고싶다면 [바로가기]

C/C++ strcat 문자열 이어붙이기 [바로가기]C/C++ strcpy 문자열 복사 [바로가기]

C/C++ getchar, putchar 문자 입출력 [바로가기]

 

<목차>

1. C/C++ gets, puts 함수에 대해서.

2. C/C++ gets 예제.

3. C/C++ puts 예제.

 

1. C/C++ gets, puts 에 대해서


 

gets 함수란?

 

헤더파일 : <stdio.h>, <cstdio>

함수원형 : char* gets(char* str);

 

표준 입력(stdin)으로 들어온 문자열을 C언어 스타일 문자열인 char*, char[] 타입으로 저장해 주는 함수 입니다.

gets 함수가 "문자열"이라고 감지하는 기준은 개행(\n)입니다.

gets 함수는 들어온 문자열ㅇ에 대해 '\0'울 붙여줍니다.

정리하면, 표준입력으로 들어온 문자열 개행한 부분 앞까지 짤라char* 타입의 문자열로 저장해주고, 자동으로 문자열 맨 끝에 '\0'을 넣어서 문자열을 완성해 줍니다.

 

gets 예시

char str[100];       //문자열을 입력받아서 저장할 배열 선언.

gets(str);            // char*, char[] 타입의 문자열에 stdin으로 들어온 문자열 입력 받음.

printf("%s", str);   // 출력

 

최신 visual studio에서는 gets는 사용하지 않게 하고 gets를 오버로드한 gets_s를 사용하라고 권장합니다. 

gets의 문제는 버퍼 오버플로우가 날 수 있기 때문에, 그것을 방지 하기 위해서 조금 안전하게 gets_s를 만들어서 제공하는 것 입니다.

▼ puts 함수란?

헤더파일 : <stdio.h>, <cstdio>

함수원형 : int puts(const char* str)

 

C언어 스타일의 문자열인 char*, char[] 타입을 표준 출력(stdout)으로 보내는 함수입니다.

puts 함수가 문자열을 출력을 끝까지 하고나면 개행(\n)도 보내기 때문에 자동적으로 줄이 바뀌게 됩니다.

puts 함수의 매개변수로 들어온 문자열 처음부터 문자열의 끝 '\0' 까지의 문자열을 출력합니다.

정리하면, 매개변수로 들어온 char* 타입의 문자열의 주소값으로 가서 문자열의 '\0'이 나올때까지의 문자들표준출력(output)쭉 출력해주다가 다 력한 후에는 친절하게 개행('\n') 까지 넣어주는 함수 입니다.

 

puts 예시

char str[100] = "BlockDMask";    

puts(str);       // 문자열을 표준출력(콘솔창)으로 출력합니다.

 

 

2. C/C++ gets 예제.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//[C언어/C++] gets example.
//BlockDMask.
#include<stdio.h>
 
int main(void)
{
    char str[100];
    for (int i = 0; i < 3++i)
    {
        gets(str);
        printf("str : %s\n", str);
        int j = 0;
        while (true)
        {
            if (str[j] == '\0')
                break;
            printf("[%c]", str[j]);
            ++j;
        }
        printf("\n\n");
    }
    return 0;
}
cs

 

 

▲ gets 예제 결과.

표준입력으로 입력받은 문자들을 char* 타입의 문자열로 잘 집어넣는것을 알 수 있습니다.

while문 내부에서 

무한루프에 빠지지 않고 문자열을 잘 출력하는걸 보면, C언어 스타일의 문자열 끝을 알리는 '\0' 기호가 잘 들어가 있는걸 간접적으로 확인 할 수 있습니다.

 

 

2. C/C++ puts 예제.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//[C언어/C++] puts example.
//BlockDMask.
#include<stdio.h>
 
int main(void)
{
    char str[100];
    for (int i = 0; i < 3++i)
    {
        printf("input : ");
        gets_s(str);
 
        printf("output : ");
        puts(str);
    }
    return 0;
}
cs

 

 

▲puts 예제 결과.

결과를 보면, char* 타입의 문자열을 표준출력(콘솔창)에 잘 출력해 주는걸 볼 수 있습니다.

그리고, puts를 한 후에 따로 개행 하지 않았는데 자동으로 개행이 되어있는걸 볼 수 있습니다.

반응형