반응형

앞서 표준 입출력에 대해 설명했고, 문자(character) 1개의 1byte를 취급하는 입출력 함수에 대해 설명했다.

https://ansan-survivor.tistory.com/1297

 

[C언어] C언어 표준 입출력 stdin, stdout (입력과 출력), 문자 입출력 ( getchar, putchar, fgetc, fputc)

C언어에서 표준으로 지정된 입력스트림, 출력스트림이 있다. 보통 "키보드"의 입력을 통해 받으니 입력스트림이다. (stdin) 보통 "모니터"로 결과를 확인하니 출력스트림이다. (stdout) 그 외 default로

ansan-survivor.tistory.com

 

거의 내용이 비슷하지만 여기서는 문자열 (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

 

[C언어] 포인터로 문자열 선언, 배열 문자열 선언과 차이. (문자열 내부 변경하기)

문자열(string)이란, 알파벳 하나하나가 메모리상의 연속적으로 나열되며, 마지막에는 '\0' (NULL)으로 끝나는 배열이다. 위 그림과 같이 문자열을 만드는 방법은 아래와 같다. char string[11] = "hello worl

ansan-survivor.tistory.com

 

출력 함수 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이다)

 

 

반응형

+ Recent posts