본문 바로가기
Research & Studies/Programming

[c언어] fgets함수 개행(enter) 제거하기

by ITholic-sicm 2016. 11. 18.

 

 

 

 

 

 fgets함수 개행(enter) 제거하기


오늘은 저번 포스트에서 살짝 말씀드렸듯이 fgets함수의 개행(enter)효과를 제거해보려합니다.


이 포스트를 보시기전 먼저 아래의 포스트를 먼저 보시면 훨씬 더 쉽게 이해하실 수 있습니다 :)

 


[C언어]문자열 2개 합치기 (How to concatenate 2 strings?)

http://wonderlands2.tistory.com/31

 


먼저, fgets함수의 형태에 대해서 한 번 확인해봐야합니다.


char *fgets(char *str, int n, FILE *stream) 


fgets함수는 fgets(입력받을 변수명문자열의 최대길이[배열 or 변수의 최대길이], 문자열을 받아올 표준스트림 포인터)


위와 같은 한 줄로 나열하여 보았을때는 쉽게 이해가 가지 않습니다.
그래서 다음과 같이 비교적 이해가 쉽게(?) 적어보려합니다.


str : 입력받은 문자열을 저장할 배열을 가리키는 포인터
(이 포인터가 가리키는 배열에 값을 저장하게 됩니다.)


 :  읽어들일 최대 문자 수(마지막 NULL문자 포함)
즉, n값이 1000이라면 최대 999 문자를 입력받아 처리가능

stream : 문자열을 읽어들일 스트림의 FILE 객체를 가리키는 포인터
          (즉, stdin, stdout, stderr와 같은 스트림 중 어떤 스트림에서 문자열을 읽어들
일지 결정)

표준 스트림에 대해서는 다음에 다시 한 번 정리하여 포스트해보도록 하고, 지금 계속해서 진행해보겠습니다.


저번 포스트의 결과값을 보면 아래와 같이 출력값 AAAA,BBBB가 개행이되어 나타남을 볼 수 있습니다. 이는 fgets함수가 자동으로 개행(enter)을 처리하기 때문입니다.

 


 

 

 

 

그러나 필요에 따라 이 개행을 제거하고 AAAABBBB로 표현하여 나타내야할 때가 있습니다.


문자열의 개행을 제거하여 나타내고 싶을때 아래의 코드를 이용하면 간단히 해결됩니다. ​

 if ((del_line_p = (char*)strchr(message, '\n')) != NULL)*del_line_p = '\0';

쉽게 말해 fgets 함수의 마지막 '\n' 개행부분을 '\0'으로 바꿔줌으로써 개행을 방지할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
 
char* concat(const char *s1, const char *s2)
{
    const size_t len1 = strlen(s1);
    const size_t len2 = strlen(s2);
    char *result = (char*)malloc(len1 + len2 + 1);//+1 for the zero-terminator
                                           //in real code you would check for errors in malloc here
    memcpy(result, s1, len1);
    memcpy(result + len1, s2, len2 + 1);//+1 to copy the null-terminator
    return result;
}
 
int main()
{
    char* del_line_p;
    const char A[1024= {0,};
    printf("String1:");
    fgets((char*)A, sizeof(A), stdin); 
    if ((del_line_p = (char*)strchr(A, '\n')) != NULL)*del_line_p = '\0';
 
    const char B[1024= { 0, };
    printf("String2:");
    fgets((char*)B, sizeof(B), stdin);
 
    char* s = concat(A, B);
    printf("%s", s);
    free(s);
 
 
    return 0;
}
 
cs

 

결과 :

 

 

 

다음과 같은 결과값을 가지게 됩니다.


 

 

 

반응형

댓글