포인터를 사용하여 작업을 보완하려고합니다. 그래서 이름이 분리 점을 제거하여 레이블로 분리되는 테스트 프로그램을 작성했습니다. 각 라벨은 다음과 같이 길이/데이터 쌍으로 표시됩니다. google.ru는 "x \ 06googlex \ 02ru"로 표시됩니다. 내 테스트 기능에서 돌아 왔을 때 신호 SIGABRT가 표시됩니다. 포인터로 인한 잘못된 작업으로 인한 것 같습니다. 당신은뿐만 아니라 C++를 태그하기 때문에신호 가져 오기 SIGABRT
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void test(unsigned char* dns, unsigned char* host);
int main(int argc, const char * argv[])
{
unsigned char host[]="google.ru";
unsigned char* dnsTest=(unsigned char*)malloc(20);
if(dnsTest==NULL)
{
exit(1);
}
test(dnsTest, host);
printf("%s", dnsTest);
free(dnsTest);
return 0;
}
void test(unsigned char* dns, unsigned char* host)
{
strcat((char*)host, ".");
int lock=0;
for(int i=0; i<strlen((char *)host);i++)
{
if(host[i]=='.')
{
*dns=i-lock;
dns++;
for(;lock<i; lock++)
{
*dns=host[lock];
dns++;
}
lock++;
}
}
*dns='\0';
}
이 C 또는 C++입니까? – melpomene
'strcat ((char *) host, ".");'- 버퍼 오버플로 – melpomene
@melpomene : C99 또는 C++ 중 하나이지만 그 질문은 중요하지 않습니다. – Jezor