반응형

fgets 함수는 개행문자가 (\n) 나올 때까지 문자열을 받아준다.

그런데 중요한 것은 예를들어 Hi World 를 입력하고 엔터를 쳤다고 치면

Hi World\0 이아니라

Hi World\n\0 이 받아진다는 것이다. 이것을 잘 알아야 한다.



\n : 개행문자

\0 : 문자열의 긑을 나타냄 (null 문자)


char *fgets(char *str, int num, FILE *stream);


스트림에서 문자열을 받아서 num-1 개의 문자를 입력 받을 때 까지나 개행 문자(\n) 나 파일의 끝(EOF)에 도달할 때 까지

입력 받아 문자열로 저장한다.

NULL문자는 자동으로 문자 뒤에 붙기 때문에 num-1 개의 문자이다.

마지막에 치는 엔터는 \n 의 형태로 문자열에 포함된다 주의!!


예제 ( 내가만든 것임)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
int main(void)
{
    FILE *fp=NULL;
    char a[5];
    fp=fopen("4.txt","r");
    while(1)
    {
    if(feof(fp)!=0)
        break;
    fgets(a,sizeof(a),fp);
    printf("%s\n",a);
    }
    return 0;
}
cs

배열 a의 크기가 5이기 때문에 실제로 \0을 제외하면 4개의 문자가 들어갈 수 있다.

아래 텍스트 파일을 실제로 나타내보면

abcdefgh\nidonthave\nhave\nfuckyoumuc 이다.

따라서

abcd\0efgh\0\n\0idon\0thav\0e\n\0have\0\n\0fuck\0youm\0uc\0

가 되고 printf 자체에도 개행문자를 넣어줬기 때문에


다음과 같은 결과가 나오는 것이다.


마지막 줄에 개행문자가 왜 없냐면 파일 포인터가 아랫줄로 내려가지 않았기 때문이다...


반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

성적 평균 구하기  (0) 2017.02.12
텍스트 파일 비교  (0) 2017.02.11
파일 복사  (0) 2017.01.31
대문자로 변경  (0) 2017.01.31
텍스트 파일 비교  (0) 2017.01.31
반응형

c가 공백 문자(탭, 스페이스, 줄바꿈 문자)이면 참이 되는 매크로 IS_SPACE(c)를 정의하여서 사용자가 입력한 문자열 중에서 공백 문자의 개수를 출력하여 보자.


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#define SIZE 50
#define IS_SPACE(c) {int i;int count=0;for(i=0;i<SIZE;i++){if((c[i]==' ')||(c[i]=='\t')||(c[i]=='\n')){count++;}}\
                    printf("공백 문자의 개수는 %d개입니다.\n", count);}
int main(void)
{
char c[SIZE];
printf("문자열을 입력하세요:");
gets(c);
IS_SPACE(c);
return 0;
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

2진수 출력  (0) 2017.01.16
비트 매크로  (0) 2017.01.15
원기둥의 부피  (0) 2017.01.14
배열 원소 일괄 초기화  (0) 2017.01.14
3개 정수 비교  (0) 2017.01.14

+ Recent posts