그래서 미래의 어느 시점까지 여러 패킷의 데이터를 목록에 저장해야하는 것처럼 들립니다.
나라면 std :: string 또는 std :: vector를 사용했는데 이는 할당 문제를 제거하고 일반적으로 충분히 빠르기 때문입니다.
char * 또는 char []을 사용하려는 경우 char *를 사용하고 싶습니다. "char buf [1024];"와 같은 변수를 선언합니다. 스택에 할당합니다. 즉, 함수가 반환 할 때 스택이 사라집니다. 목록에 저장하려면 동적으로 할당해야하므로 "char * buf = new char [packet.size];" 그런 다음 데이터를 복사하고 포인터와 데이터의 길이를 목록에 저장하십시오 (또는 이전에 말씀 드렸듯이, 길이를 별도로 유지하는 것을 피하는 std :: string을 사용하십시오).
데이터를 어떻게 복사합니까?
아마도 memcpy. strcpy 함수는 nul 문자를 가질 수있는 데이터에 문제가있어 네트워킹 상황에서 흔히 발생합니다. 그래서, 뭔가 같은 :
char *buf = new char[packet_length];
memcpy(buf, packet_data, packet_length);
// Put buf and packet_length into a structure in your list.
출처
2012-08-05 16:18:22
cds
'char []'은 완전한 타입이 아니므로 질문에 의미가 없습니다. –
* packet *의 정의는 무엇입니까? 최대 크기를 알고 있습니까? 패킷 내용을 처리해야합니까? –