문자열 출력 함수로 : puts, fputs 가 있다.
출력 함수 puts
- 함수 원형: int puts(const char * string)
- 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signed가 다른데, int는 모든 컴파일러가 signed int로 처리함.
- int형 이므로 어떤 컴파일러든 -1값(EOF)을 반환하는데 무리가 없다.
- 자동으로 문자열 맨뒤 '\n' 개행이 붙는다.
- char * 이므로 메모리상의 특정 문자열의 주소값이 그데로 전달 됨을 알 수 있다.
출력 함수 fputs
- 함수 원형: int puts(const char * string, FILE * stdout)
- 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signed가 다른데, int는 모든 컴파일러가 signed int로 처리함.
- int형 이므로 어떤 컴파일러든 -1값(EOF)을 반환하는데 무리가 없다.
- 문자열 맨뒤 '\n' 개행이 붙지 않는다. (직접 붙어야 함)
- puts와 마찬가지로 문자열의 주소값이 전달되나, 2번째 인자로 출력 형태를 정한다. stdout은 모니터 출력, 파일출력으로 변경 가능.
#include<stdio.h>
int main(void)
{
char* str = "hello world";
printf("1. puts test \n");
puts(str);
printf("2. fputs test \n");
fputs(str, stdout); // stdout : 모니터출력, 뒤에 개행이 없음
return 0;
}
문자열 입력 함수로 : gets, fgets 가 있다.
- 함수 원형: char gets(const char * string)
- 함수 원형: char fgets(const char * string, int n ,FILE * stdin)
gets 사용 방법.
- 할당 받은 배열 이상 초과하지 않도록 주의
- 문자열의 끝인 NULL이 없는경우 메모리 침범문제 발생
int main(void)
{
char str[7]; // 7개의 배열 공간 할당
gets(str); // 마지막 NULL을 포함한 6개의 문자열 가능. 그 이상 들어오면 할당되지 않은 메모리 침범 에러
}
fgets 사용 방법.
- gets의 단점을 보완.
int main(void)
{
char str[7]; // 7개의 배열 공간 할당
// 배열의 주소, 배열의 크기, stdin-키보드입력
fgets(str, sizeof(str), stdin);
}
예제)
입력받은 문자열을 6자씩 잘라서 표현
#include<stdio.h>
int main(void)
{
char str[7];
int i;
for (i = 0; i < 5; i++)
{
fgets(str, sizeof(str), stdin);
printf("%d: %s\n", i+1, str);
}
return 0;
}
아래와 같이 입력하면 총 6개의 글이 들어간다. (맨뒤는 NULL문자가 있기에 배열길이가 7이다)
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C] 배열과 포인터의 관계 (변수형 포인터, 상수형 포인터), 포인터로 배열 변경하기 (0) | 2023.09.17 |
---|---|
[C] 포인터로 문자열 선언, 배열 문자열 선언과 차이. (문자열 내부 변경하기) (0) | 2023.09.17 |
[C] open, close, read 함수에 대하여 (0) | 2023.09.17 |
[C] 이스케이프 문자(Escape Character) (0) | 2023.09.16 |
[C++] 쓰레기값 거르기(아주 작은값) numeric_limits (0) | 2023.09.16 |