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 : 입력받은 문자열을 저장할 배열을 가리키는 포인터
(이 포인터가 가리키는 배열에 값을 저장하게 됩니다.)
n : 읽어들일 최대 문자 수(마지막 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 |
결과 :
다음과 같은 결과값을 가지게 됩니다.
'Research & Studies > Programming' 카테고리의 다른 글
[C언어] fopen함수-txt파일 이름을 변수로 입력받아 열기. (0) | 2016.12.30 |
---|---|
[알고리즘] a la russe 알고리즘 (곱셈 알고리즘) (0) | 2016.11.23 |
[C언어]문자열 2개 합치기 (How to concatenate 2 strings?) (0) | 2016.11.18 |
[C언어]문자열을 txt파일을 hex로 변환하여 배열에 저장하기 (2) | 2016.11.09 |
댓글