Jiyong's STUDY

scanf gets fgets 문자열 입력 비교 본문

프로그래밍/C

scanf gets fgets 문자열 입력 비교

Kingjiyong 2018. 3. 19. 14:06

int scanf(const char *format, ...);

scanf 함수의 경우에는 공백단위로 입력받는다.

즉 how are you 라는 문장을 입력한다고 하면 공백단위로

how만 입력받게 되므로 문자열을 입력받기엔 부적합하다.


#include <stdio.h>


int main(){

char str[20];

scanf("%s", str);

printf(str);

}


에서 how are you를 입력했다면

how만 나오게 된다.



char *gets(char *s);

gets 함수의 경우에는 줄바꿈 단위로 입력받는다.

엔터를 입력하기 전까지 문자열을 입력받는다.

즉 줄을 읽어서 입력한다고 보자.


#include <stdio.h>


int main(){

char str[20];

gets(str);

puts(str);

}


에서 how are you를 입력했다면

how are you가 출력된다.

하지만 문자열을 받는 배열의 길이에 상관없이 입력을 받으므로,

문제가 생길 가능성이 높으므로 사용하지 않는 것이 좋다.


char* fgets(char *s, int n, FILE *stream);

fgets 함수도 마찬가지로 줄바꿈 단위로 입력받는다.



#include <stdio.h>


int main(){

char str[20];

fgets(str, sizeof(str), stdin);

puts(str);

}


에서 how are you를 입력했다면

how are you

가 입력된다.

이게 어떤 의미를 가지냐면 널 문자 이전에 '\n'까지 입력된다는 의미다.

그리고 인자로 문자열을 입력 받을 변수 뒤에 있는 int형 정수는 fgets가 입력 받을 길이를 의미한다.


이 함수의 경우에는 sizeof(str)이 들어갔으므로 null문자까지 20글자가 입력 가능하다. 

'프로그래밍 > C' 카테고리의 다른 글

strcmp, strncmp 설명, 비교  (0) 2018.05.15
strcat, strncat 설명, 비교  (0) 2018.05.15
strcpy strncpy 설명, 비교  (0) 2018.05.14
비트시프트연산  (0) 2018.03.19
강제형변환  (0) 2018.03.19