scanf 함수는 공백이 포함된 형태의 문자열을 입력 받는데 제한이 있다. 그러나 puts, fputs는 제한이 없다

 

문자열 출력 함수 : puts, fputs

puts : 출력의 대상이 stdout으로 고정, 이 함수가 호출되면 문자열 출력 후 자동으로 개행(\n)이 이루어짐

fputs : 두 번째 인자를 통해서 출력의 대상을 결정 가능, 문자열 출력 후 자동으로 개행이 이루어지지 않음

1
2
3
4
#include <stdio.h>
 
int puts(const char * s);
int fputs(const char * s, FILE * stream);
cs

→ 성공 시 음수가 아닌 값을, 실패 시 EOF 반환

 

문자열 입력 함수 : gets, fgets

gets : stdin으로 부터 문자열을 입력 받음

fgets : 문자열을 입력 받을 곳을 설정 가능하며, size도 설정할 수 있다, 이 함수는 \n을 만날 때까지 문자열을 읽어 들이는데, \n을 제외시키거나 버리지 않고 문자열의 일부로 받아들인다. (우리가 입력 한 엔터 키의 정보까지도 문자열의 일부로 저장됨)

1
2
3
4
#include <stdio.h>
 
char * gets(char * s);
char * fgets(char * s, int n, FILE * stream);
cs

ex)

1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
   char str[7];
   gets(str);
}
cs

 

1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
   char str[7];
   fgets(str, sizeof(str), stdin);
}
cs

↑ 여기서 str배열 사이즈인 7값이 설정 돼 있지만 "123456789"의 문자열을 받게 될 경우 str배열에는 "123456"만 값이 저장된다. 이유는 문자열의 끝에 자동으로 널 문자가 추가되므로.

 

 

 

 

 

Posted by 知彼知己百戰不殆
,