앞서 표준 입출력에 대해 설명했고, 문자(character) 1개의 1byte를 취급하는 입출력 함수에 대해 설명했다.
https://ansan-survivor.tistory.com/1297
거의 내용이 비슷하지만 여기서는 문자열 (String) 에 대한 함수를 다룬다.
문자열 출력 함수로 : puts, fputs 가 있다.
출력 함수 puts
- 함수 원형: int puts(const char * string)
- 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signed가 다른데, int는 모든 컴파일러가 signed int로 처리함.
- int형 이므로 어떤 컴파일러든 -1값(EOF)을 반환하는데 무리가 없다.
- 자동으로 문자열 맨뒤 '\n' 개행이 붙는다.
- char * 이므로 메모리상의 특정 문자열의 주소값이 그데로 전달 됨을 알 수 있다. (문자열 전달 방식 아래 참고)
https://ansan-survivor.tistory.com/1251
출력 함수 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++' 카테고리의 다른 글
[C언어] 문자열 출력 버퍼(buffer) 비우는 함수 fflush() 함수 (0) | 2022.02.27 |
---|---|
[C언어] 문자열 입력 버퍼(buffer) 비우기 함수 (0) | 2022.02.25 |
[C언어] 파일 읽기 쓰기(read, write) 추가하기 모드 종류 (wt, rb, a+t) (0) | 2022.02.22 |
[C언어] C언어에서 EOF란? (C언어 파일 종료 코드) (2) | 2022.02.22 |
[C언어] C언어 표준 입출력 stdin, stdout (입력과 출력), 문자 입출력 ( getchar, putchar, fgetc, fputc) (0) | 2022.02.21 |