728x90
#include "chun.h"
typedef struct {
char tcphead[1];
}Head;
typedef struct {
Head tcphead;
char a[1];
char b[1];
char count[1];
}Form, *iForm;
typedef struct {
char name[5];
char nick[3];
}subForm, *isubForm;
void TR(char *InBuf, char *OuBuf);
int main()
{
char *InBuf = "9132abcdefgh123456789";
char *OuBuf;
TR(InBuf, OuBuf);
printf("OUTPUT = %s\n", OuBuf);
return 0;
}
void TR(char *InBuf, char *OuBuf)
{
iForm iform = (iForm)InBuf; // 위치정보를 담는다.
isubForm isubform = (isubForm)( iform + 1); // +1의의미는 iForm의 사이즈만큼 커진다는 의미다. 즉 InBuf에서 iform부분이 빠지게 된다.
iForm oform = (iForm)OuBuf; // 뒤에 리스트만 짜르고 output만들어준다.
char tcphead[1+1];
char a[1+1];
char b[1+1];
char count[1+1];
char name[5+1];
char nick[3+1];
int i = 0;
int len = 0;
memset(tcphead, 0x00, sizeof(tcphead));
memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(count, 0x00, sizeof(count));
memcpy(tcphead, iform->tcphead.tcphead, sizeof(iform->tcphead.tcphead));
memcpy(a, iform->a, sizeof(iform->a));
memcpy(b, iform->b, sizeof(iform->b));
memcpy(count, iform->count, sizeof(iform->count));
//sprintf(count, "%s", iform->count, sizeof(iform->count));
printf("%s %s %s %s\n", iform->tcphead.tcphead, iform->a, iform->b, iform->count); // 주소값을 어떻게 가지고 출력하는지..
printf("%s %s\n", isubform->name, isubform->nick);
printf("---------------------------------\n");
printf("[%s][%s][%s][%s]\n", tcphead, a, b, count);
for( i = 0 ; i < atoi(count) ; i++)
{
memset(name, 0x00, sizeof(name));
memset(nick, 0x00, sizeof(nick));
memcpy(name, isubform->name, sizeof(isubform->name));
memcpy(nick, isubform->nick, sizeof(isubform->nick));
printf("i = %d ,,,,[%s][%s]\n", i, name, nick);
isubform++;
}
len = sizeof(Form) + sizeof(subForm)*atoi(count); // 리스트를 담아줬다면 output의 데이터 길이일 것이다. 그러나 리스트를 빼서 주기때문에 밑에서 다르게 출력
printf("output len = %d\n", len - sizeof(subForm)*atoi(count));
memcpy(oform->tcphead.tcphead, tcphead, sizeof(tcphead));
memcpy(oform->a, a, sizeof(a));
memcpy(oform->b, b, sizeof(b));
memcpy(oform->count, count, sizeof(count));
memcpy(OuBuf, oform, sizeof(oform));
}
절취선 위는 구조체에 자르면서 담기 전이고
밑에는 구조체로 자른 형태다.
원형에는 tcphead를 포함한 메인데이터가 들어가고
sub에는 리스트형태가 들어간다고 생각하고 만든 예시이다.
왜 중간에 sprintf로 담으면 출력이 이상해지는 걸까..
728x90
'개발 업무(코딩)-개발자였을때 썼던..' 카테고리의 다른 글
파이썬(python) 크롤링(crawling) 간단 예제(코로나 확진자수 확인) (0) | 2023.01.08 |
---|---|
c언어 함수포인터(fp) function pointer 간단 예제 (0) | 2023.01.08 |
c와 mariadb 연결하는 방법 및 예제 3 - insert+update 한번에 (0) | 2023.01.08 |
c언어 리눅스(linux) 디렉토리 열기(opendir) & stat 간단 예제 (0) | 2023.01.08 |
리눅스(linux) chmod 권한설정 (0) | 2023.01.08 |