//No.1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _QPACKET {
int nSize;
char data[0]; //<--- 이 부분 data가 길어지더라도 시작 번지를 갖고 있는다
} QPACKET;
void aaa(int nSize, char *data)
{
QPACKET *test;
int a = 0;
a = sizeof(int);
test = (QPACKET*) malloc(sizeof(int) + strlen(data) + 1); //<--- 데이터의 길이 만큼 동적 메모리 할당
test->nSize = nSize;
strcpy(test->data, data);
printf("R: %s\n", test->data);
free(test);
}
void main(){
char data[12];
strcpy(data, "abcde");
aaa(strlen(data), data);
}
//No.2
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _QPACKET {
int nSize;
char *data; <--- 이 부분
} QPACKET;
void aaa(int nSize, char *data)
{
QPACKET *test;
int a = 0;
a = sizeof(int);
test = (QPACKET*) malloc(sizeof(QPACKET));
test->data = (char *) malloc(strlen(data)+1); <--- malloc 한 번더
if(test->data==NULL){
printf("메모리 할당 실패\n");
}
test->nSize = nSize;
strcpy(test->data, data);
printf("R: %s\n", test->data);
free(test->data);
free(test);
}
void main(){
char data[12];
strcpy(data, "abcde");
aaa(strlen(data), data);
}