memcpy한 값을 확인하고 싶은데 잘 안되네요...소스좀 봐주세요.
글쓴이: cccc2002 / 작성시간: 금, 2003/08/08 - 12:01오후
#include <stdio.h> #include <stdlib.h> typedef struct tagData{ int nFlag; int nSize; char* pszData; }DATA; DATA dtCommand, dtOption; //-- char btBuf[1024]; char aaa[1024]; int i; int main(int argc,char *argv[]) { int b_size,command_size,option_size; memset(btBuf, 0x00, sizeof(btBuf)); //-- dtCommand.nFlag = 0; dtCommand.nSize=strlen("command command"); dtCommand.pszData=(char *)malloc(dtCommand.nSize*sizeof(char)); strcpy(dtCommand.pszData,"command command"); memcpy((char *)btBuf, &dtCommand, sizeof(int) * 2); memcpy((char *)(btBuf + sizeof(int)*2), &dtCommand.pszData, dtCommand.nSize); //-- //strcpy((char*)(btBuf + sizeof(int) * 2),dtCommand.pszData); b_size=(sizeof(int) *2 +dtCommand.nSize); dtOption.nFlag = 1; dtOption.nSize=strlen("data data"); dtOption.pszData=(char *)malloc(dtOption.nSize*sizeof(char)); strcpy(dtOption.pszData,"option option"); memcpy((char*)(btBuf + b_size), &dtOption, sizeof(int) * 2); memcpy((char*)(btBuf + b_size + sizeof(int) * 2), &dtOption.pszData,dtOption.nSize); sprintf(aaa,"%s",btBuf); for(i=0;i<100;i++) printf("%c",aaa[i]); return 0; }
Forums:
[quote]strcpy(dtCommand.pszData,"command
이 부분은 strcpy 보다는 memcpy를 사용하는게 좋을거 같군요...
아니면 사이즈를 1더 크게 잡아 주시든지...
아래의
이 부분도 같이 해주시는게 좋을거 같군요...
그렇지 않으면 side-effec가 날 소지가 아주 다분하네요.
그리고 결과치를 확인을 해보고 싶으시면...
이렇게 해서 temp의 값들을 찍어서 확인을 해보시면은 확실 할 것 같군요...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
일단 strcpy는 memcpy로 바꿨는데 다음에 Data temp;가....
Data temp로 하니까 안되네요......
dtBuf에 다음 값들을 바이너리 형태로 다음 순서대로 저장해
flag size commmand flag size option
ex) " 0 15command command113option option"
처음 4바이트 읽어서 플래그 확인하고 다음 4바이트를 읽어서 command 사이즈를 확인한다음command값을 확인하고나서 다음4바이트 값을 읽어 플래그 값을 확인하고 나서 다음4바이트 값을 읽어 옵션 의 길이를 확인한다음 그 값을 옵션의 길이만큼 읽으려고 하는데.....
그리고 그값을 배열에 저장해서 확인할려합니다.
결과치 확인이 조금 힘드네요 .....지금 btBuf배열에 바이너리 형태로 저장이 되어 있는데....
Data temp로 해도 될런지..
아마...aaa array에 dtCommand, dtOption 이
아마...
aaa array에 dtCommand, dtOption 이 값들이 제대로 들어 갔다면...
temp로 memcpy한 후에도 제대로 인식이 되어야 정상입니다.
만약 이렇게 되지 않는다면...
글쎄요...-_-ㅋ
다시 한 번 주의해서 보세요...
그 말밖에...-_-ㅋ
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
아래부분 처럼 고쳤더니 출력값이 0 0 0 0 15 0 0 0
아래부분 처럼 고쳤더니 출력값이
0 0 0 0 15 0 0 0 플래그 사이즈
()//이부분은 commamd commamd 가 출력이 되야하는부분...아직 출력못함
1 0 0 0 9 0 0 0 플래그 사이즈
이렇게 정상적으로 나오네요.
그런데 문제는 command command 하고 data data를 출력하는 방법을 모르겠습니다.
한가지..
memcpy의 결과를 확인 하기 위해 btBuf의 값을 보려고
다음과 같은 방식으로 처리한것이 잘못되었습니다.
==> 다음과 같이 수정바랍니다.
또한 다음 2가지 수정할 부분이 있습니다.
1. memcpy((char *)(btBuf + sizeof(int)*2), &dtCommand.pszData, dtCommand.nSize);
==> &dtCommand.pszData 를 dtCommand.pszData 로..
2. memcpy((char*)(btBuf + b_size + sizeof(int) * 2), &dtOption.pszData,dtOption.nSize);
==> &dtOption.pszData 를 dtOption.pszData 로..
답글 달아주시분들 감사합니다.....해결했습니다. 아래 소스처럼
이런식으로 값을 할당하고 확인했습니다.
댓글 달기