本文共 830 字,大约阅读时间需要 2 分钟。
char buffer[1024]={0};
char p = malloc(1024300);char *q = p;printf("---p: %p, q: %p--- \n", p, q); //打印查看p ,q地址unsigned int recvsize = 0;while(1){ int ret = read(sockfd, buffer, 1024); //获取服务器的信息if(ret <= 0) break;memcpy(q, buffer, ret); //拷贝数据q+=ret; //地址偏移recvsize+= ret; //总字节memset(buffer, 0, sizeof(buffer)); //清空内存,为下次写入准备}printf("ED---p: %p, q: %p--- \n", p, q); //打印地址信息q = strstr(p, "r\n\r\n")+4; //ERROR /* q = strstr(p, "\r\n\r\n")+4; // TRUE 偏移指针 获取"\r\n\r\n"后面的图片有效数据*/
printf("RED---p: %p, q: %p--- \n", p, q);
printf("recvsize:%d\n", recvsize);FILE*file = fopen(pic, "w+");fwrite(q, recvsize-(q-p), 1, file);fclose(file);free(p);运行结果:
原因分析:
请求格式是以"\r\n\r\n"结束,而 q = strstr(p, "r\n\r\n")+4; 少了个'\', 因此strstr返回NULL, 因此,q的地址为0x4;所以一直无法为后面的操作提供有效的图片数据转载于:https://blog.51cto.com/13502993/2045781