我想使用memcpy()函數來存儲從read()中獲取的一些二進制數據。如何使用memcpy()函數?
基本上,我想存儲buf中我緩衝:
#define MAX_BUFFER_SIZE 256
//...
char *
httpget(const char * domain, const int port, const char * headers)
{
int sockfd;
int buf_size = MAX_BUFFER_SIZE;
struct sockaddr_in sock_addr;
struct hostent * host;
char * buffer;
char * newbuf;
char * tbuf;
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd == -1)
{
return NULL;
}
host = gethostbyname(domain);
if(NULL == host)
{
close(sockfd);
return NULL;
}
memset(&sock_addr, '\0', sizeof(sock_addr));
sock_addr.sin_family = AF_INET;
memcpy(&sock_addr.sin_addr.s_addr,
host -> h_addr,
host -> h_length);
sock_addr.sin_port = htons(port);
if(connect(sockfd, (struct sockaddr *) &sock_addr, sizeof(sock_addr)) == -1)
{
close(sockfd);
return NULL;
}
if(write(sockfd, headers, strlen(headers) + 1) == -1)
{
close(sockfd);
return NULL;
}
buffer = malloc(MAX_BUFFER_SIZE);
tbuf = malloc(MAX_BUFFER_SIZE);
if(buffer == NULL || tbuf == NULL)
{
return NULL;
}
int bytesloaded = 0;
int readed;
while((readed = read(sockfd, tbuf, MAX_BUFFER_SIZE)) > 0)
{
if(bytesloaded + readed >= buf_size)
{
buf_size = buf_size + MAX_BUFFER_SIZE;
newbuf = realloc(buffer, buf_size);
if(newbuf != NULL)
{
buffer = newbuf;
}
else
{
return NULL;
}
}
memcpy(buffer, tbuf, readed);
bytesloaded += readed;
}
close(sockfd);
printf("buffer = %s", buffer);
return buffer;
}
,但是當我的printf( 「%s」 時,緩衝區);我從二進制文件中只獲得了HTTP Headers和�PNG
字符,其內容長度爲7007。如何解決這個問題?我希望你明白這一點。任何幫助非常感謝。提前感謝。
這是重新輸入的代碼嗎?'buffe'肯定看起來像編譯器會捕獲的錯字。如果你的縮短代碼真的失敗了,這真的是最好的 - 調試只存在於本網站上的代碼是沒有意義的...... – sarnold 2012-03-27 00:53:27
請注意,如果第二次內存分配失敗,你將泄漏第一次內存分配中分配的256字節。 – sarnold 2012-03-27 00:54:22
@sarnold:是錯字。我添加了我的真實代碼。 – Jack 2012-03-27 01:00:52