본문 바로가기
놀기/잡스러운 것

나누어진 문자열 순서 뒤집어 붙이기

by Hi~ 2021. 6. 25.

요즘 주로 사용하는 언어나 다양한 라이브러리를 사용할 수 있는 환경이라면 일도 아닌 것인데

RTOS 기반의 제한적 환경에서 작업을 하게 되면 이래저래 불편하다.

착한 분이 포팅해 놓은 라이브러리가 있으면 모를까 없으면 짜야한다. (찾아보는 것도 일이다.)

그것도 아주 간단하게...

C언어 처음 접하는 사람이 짜는 방식으로 ㄷㄷㄷ

 

수신한 문자열의 순서를 뒤집어야 하는데 테스트 겸 간단히 만들어 보았다.

 

아래 코드 보고 배열에 있는 것 같은데 거꾸로 바로 붙이면 되는 거 아니냐고 할지 모르겠지만, 그런 상황이 아니니깐 테스트 겸 코딩한 거겠죠?? ㅎ

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
	
#define RECORD_ROUTE_MAX	(4)
#define BUFF_SIZE_MAX		(2048)

	char* f = NULL;
	char* s = NULL;
	char* t = NULL;
	char* buf_f = NULL;
	char* buf_s = NULL;
	char* Record_Route[RECORD_ROUTE_MAX] = {
		"Record-Route: <sips:sip6.linphone.org:5223;lr>\r\n",
		"Record-Route: <sip:54.37.202.229:5059;transport=tcp;lr>\r\n",
		"Record-Route: <sip:91.121.209.194:5060;transport=tcp;lr>\r\n",
		"Record-Route: <sip:91.121.209.194:5060;lr>\r\n"
	};

	buf_f = (char*) malloc(sizeof(char) * BUFF_SIZE_MAX);
	buf_s = (char*) malloc(sizeof(char) * BUFF_SIZE_MAX);
	memset(buf_f, 0x00, sizeof(char) * BUFF_SIZE_MAX);
	memset(buf_s, 0x00, sizeof(char) * BUFF_SIZE_MAX);

	f = buf_f;
	s = buf_s;

	printf("원문 : \n");
	for (int i=0; i<RECORD_ROUTE_MAX; i++) {
		printf("%s", Record_Route[i]);
	}

	printf("\n뒤집기 : \n");
	for (int i=0; i<RECORD_ROUTE_MAX; i++) {

		// 초기화 또는 문자열 복사 후에 끝에 NULL 입력
		// 아니면 strncpy() 대신 strcpy() 사용
		memset(s, 0x00, sizeof(char) * BUFF_SIZE_MAX);
		strncpy(s, Record_Route[i], strlen(Record_Route[i]));

		// 새로 읽어드린 문자열 뒤에 이전 문자열의 모음을 붙임
		strcat(s, f);

		// swap
		t = s;
		s = f;
		f = t; 
	}

	printf("%s\n", f);

	free(buf_f);
	free(buf_s);	

	return 0;
}

 

댓글