我写了个http下载函数,下载txt、jpg都正常,就是下载php有问题:valgrind会报错Conditional jump or move depends on uninitialised value(s),

 

函数定义:

char* httpdown(char *domain, int port, char *uri, int *length) ;

 

调用:

strcpy(uri, "/net.php");

rtn = httpdown("192.168.1.24", 80, uri, &len);    

printf("File saved\n%s\n", rtn);

大概发现printf这句会报那个错,如果uri是个txt或者jpg都不会报 。

经过一番折腾后发现是memcpy的问题,改成strncpy就可以了,但那样如果是图片又不能正确处理,所以,就只好判断下返回数据类型了,具体代码:

char* httpdown(char *domain, int port, char *uri, int *length) {
char buffer[RECEIVE_BUF + 1];
//memset(buffer, '\0', RECEIVE_BUF + 1);
char* rtn;
rtn = malloc(DOWNLOAD_BUF);
rtn[0] = 0;
(*length) = 0;
int sockfd = openRequest(domain, port, uri, rtn, buffer); #ifdef DEBUG
if (sockfd < 0){
printf("Connect to %s:%d failed\n", domain, port);
return rtn;
}
#else
if (sockfd < 0)
return rtn;
#endif #ifdef DEBUG
printf("Init connect to %s:%d done, fd=%d\n", domain, port, sockfd);
#endif int len, needLen, dataLen=0;
int current_buffer_size = DOWNLOAD_BUF; rtn[0] = 0;
buffer[0] = 0;
int type = -1;
char * tmp;
while (1) {
len = recv(sockfd, buffer, RECEIVE_BUF, 0);
if(type<0){//如果没有取得返回数据类型
tmp = strstr(buffer, "Content-Type");//如果已经获得content-type——潜在bug如果content-type和他的值没有一起返回则会出问题,不管了
if(tmp!=NULL){
tmp = strstr(tmp, "text");
if(tmp==NULL)
type=1;
else
type=0;
}
}
if (len > 0) {
needLen = dataLen + len;
while (current_buffer_size <= needLen) {
current_buffer_size += DOWNLOAD_BUF;
#ifdef DEBUG
printf("realloc to %d\n", current_buffer_size);
#endif
rtn = realloc(rtn, current_buffer_size);
rtn[dataLen] = 0;
}
#ifdef DEBUG
printf("http sockect received %d data\n", len);
#endif
if(type<1)//字符串用strncat
strncat(rtn+dataLen, buffer, len);
else
memcpy(rtn+dataLen, buffer, len);
dataLen+=len;
} else {
if (len < 0) {
if(errno>0)
sprintf(rtn, "消息接收失败!错误代码是%d,错误信息是'%s'\n", errno,
strerror(errno));
return rtn;
}
#ifdef DEBUG
printf("Read data from %s:%d, complete\n", domain, port);
#endif
break;
}
} close(sockfd);
(*length) = dataLen;
return rtn;
}

HTTP(socket)下载遇到valgrind提示的错误: Conditional jump or move depends on uninitialised value(s)的更多相关文章

  1. chrome下载提示网络错误

    问题背景:项目开发测试阶段出现该问题. 复现:开发调试过程中一直没有问题,本地下载excel.Word.pdf 都完美,但是在服务部署到服务器之后,测试环境的chrome就总是下载失败,提示网络错误. ...

  2. docker pull提示x509错误的对应方法

    在一台虚拟机上使用docker pull时出现了x509错误,相关原因与对应方法简单memo如下. 错误现象 在使用docker pull从dockerhub上下载镜像时提示如下错误 docker: ...

  3. vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法

    今天安装了vs2015 下载一个项目进行试用,启动调试的时候提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 最可能的原因: 没有为请求的 URL ...

  4. c# webapi发布到windows server 2008 r2 iis上提示404错误

    项目服务端是一组RestFul风格的webapi,发布到本机的iis没有问题,但是发布到服务器以后就提示404错误.本机是win10的,服务器是windows server 2008 R2 64位.之 ...

  5. 【我是老中医】VMware在win8.1下开Ubuntu提示”内部错误"解决方案

    这个题目起得很洋气啊,其实问题也比较好解决,但是我想多码几个字!!! 友情提示:如果不想看废话,请直接看最后的红字! 好的,咱们从头说(废话)起.话说我们学院每年都会组织大三的进行校企联合实训(其实就 ...

  6. 百度地图API提示"230错误 APP Scode校验失败"

    笔者近2天在 Android Studio上玩了一下百度地图,碰到了常见的"230错误 APP Scode校验失败",下面我来介绍一下具体的解决办法. 1.在andriodstud ...

  7. Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码

    主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: #include <stdio.h> #include <sys/types. ...

  8. tomcat + jenkins启动tomcat后打开jenkins页面提示404错误的解决方案

    首先下载tomcat和jenkins,将下载的jenkins2.12 war放到tomcat的webapps文件夹下后执行/bin文件夹下的start启动后,打开http://localhost:80 ...

  9. 关于源码编译每次提示有错误 要make update-api

    最近编译newline的版本的时候..同事修改了andoid默认输入法为百度.这是系统自动提供的API,所以每次编译会提示 此时在编译源码生成SDK的过程中会出现这个问题:************** ...

随机推荐

  1. SpringAop学习

    Spring Aop (jdk动态代理和cglib代理) Aop 的概念 aop即面向切面编程,一般解决具有横切面性质的体统(事务,缓存,安全) JDK动态代理: 可以使用实现proxy 类,实现jd ...

  2. poj3384Feng Shui(半平面交)

    链接 将边长向内推进r,明显这样把第一个圆的圆心放在新的边长是肯定是最优的,与原本边相切,然后再找新多边上的最远的两点即为两圆心. #include <iostream> #include ...

  3. thinkphp ajax 无刷新分页效果的实现

    思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...

  4. [js] 非常好的面试题,学习了。。

    原文链接:http://www.cnblogs.com/xxcanghai/p/5189353.html

  5. 让Fiddler能够检测到localhost的http数据

    用 vs.net开发调试网站程序时经常有这样的地址: http://localhost:2033/ 然而在开启 Fiddler 后会发现Fiddler 完全抓不到任何封包. 主要的原因是因为 Fidd ...

  6. 使用升级助 升级了win10,黑屏,无桌面 解决方案

    使用U盘重装即可. 事实证明,win10升级助手实在不咋地 优待又2: (1)保留原win7系统,有后悔药: (2)原系统的软件可用: 缺点: (1)装得慢,一上午: (2)开机慢,三分半 (3)开机 ...

  7. Octave入门

    Octave/Matlab Tutorial Octave/Matlab Tutorial Basic Operations 你现在已经掌握不少机器学习知识了 在这段视频中 我将教你一种编程语言 Oc ...

  8. osx 10.11.5 El Capitan U盘制作安装

    osx 10.11.5 El Capitan U盘制作安装 1. 下载osx10.11.5 从mac的 appstore下载(官方原版) 2. U盘8G起(注意备份重要资料) 3. 下载完成之后在Fi ...

  9. js代码如何测试代码运行时间

    function add(){ //这里放要执行的代码 } //开始测试并输出 function test() { var start=new Date().getTime(); add(); var ...

  10. linux笔记:linux系统安装-vmware虚拟机安装

    vmware版本:vmware8(百度云里备份了安装程序VMware_Workstation_wmb.zip) vmware软件安装过程: 1.在百度云中下载安装程序压缩包VMware_Worksta ...