선언방법
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')
'프로그래밍 언어 > c c++' 카테고리의 다른 글
[c++] 문자열을 특정 문자 기준으로 자르기2 getline & stringstream (0) | 2020.10.10 |
---|---|
[c++] accumulate 함수 (0) | 2020.10.06 |
[c c++] 문자열을 특정 문자 기준으로 자르기1 strtok (0) | 2020.04.11 |
[c++] 문자열 입력받기 (0) | 2020.04.11 |
[c++] STL map container 사용 (0) | 2020.03.11 |
댓글