본문 바로가기
프로그래밍 언어/c c++

[c] 문자열 입력

by m2162003 2020. 4. 11.

선언방법

char str[LENGTH];
char *c;

마지막에 null문자(\0)가 저장되니 필요한 길이 +1 해서 저장하자. 

 

1. scanf("%s", s);

문제: 공백문자 못읽음

=> scanf("%[^\n]s", s); 를 사용하면 공백을 포함한 문자열 받는게 가능하다.

 

- 참고로 scanf는 저렇게 선언된 포인터형 문자열은 못읽는다...

어떻게 해야 하나! malloc해줘야 한다. 문자열 크기만큼!

#include <stdio.h>
#include <stdlib.h>
int main()
{
	//가능
    char *s1 = malloc(sizeof(char) * 10);  
    scanf("%s", s1);      
    free(s1); 
    
    //에러
    char *s2;
    scanf("%s", s2);

    return 0;
}

2. gets(s);

개행문자('\n', 엔터)를 입력할때까지 입력받는다. 즉, 엔터 치기 전 문자열들을 모두 읽고 엔터는 버린다.

대신에 '\0'문자를 추가하여 호출한 프로그램에 문자열 전달

 

문제: 주어진 문자열의 길이가 넘어가면 잘리는게 아니라서 오버플로우가 난다...

=> scanf와 동일하게 주로 char c[LENGTH]처럼 크기가 정해진 경우 사용한다. 

=> 쓰지 말자..

3. fget(s, LENGTH, stdin)

개행문자('\n')까지 읽는다.

파일 읽을 때 많이 사용한다.

stdin자리에 파일이름 넣으면 파일 읽어온다. stdin은 키보드 입력 읽는다는 소리

 

문제: 버퍼크기를 아는 장점이 있으나 length만큼만 읽는다.

fgets(s1, sizeof(s1), stdin);

 

4. 문자로 문자열 받기 getchar() (개행문자 빼고)

while(getchar() != '\n'); // 마지막 문자열까지 한 글자씩 받기

 

5. 문자로 문자열 읽기

int i=0;

do {

 c = getchar();

 str[i++] = c;

} while(c!='\n')

댓글