HTTP(socket)下载遇到valgrind提示的错误: Conditional jump or move depends on uninitialised value(s)
我写了个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)的更多相关文章
- chrome下载提示网络错误
问题背景:项目开发测试阶段出现该问题. 复现:开发调试过程中一直没有问题,本地下载excel.Word.pdf 都完美,但是在服务部署到服务器之后,测试环境的chrome就总是下载失败,提示网络错误. ...
- docker pull提示x509错误的对应方法
在一台虚拟机上使用docker pull时出现了x509错误,相关原因与对应方法简单memo如下. 错误现象 在使用docker pull从dockerhub上下载镜像时提示如下错误 docker: ...
- vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法
今天安装了vs2015 下载一个项目进行试用,启动调试的时候提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 最可能的原因: 没有为请求的 URL ...
- c# webapi发布到windows server 2008 r2 iis上提示404错误
项目服务端是一组RestFul风格的webapi,发布到本机的iis没有问题,但是发布到服务器以后就提示404错误.本机是win10的,服务器是windows server 2008 R2 64位.之 ...
- 【我是老中医】VMware在win8.1下开Ubuntu提示”内部错误"解决方案
这个题目起得很洋气啊,其实问题也比较好解决,但是我想多码几个字!!! 友情提示:如果不想看废话,请直接看最后的红字! 好的,咱们从头说(废话)起.话说我们学院每年都会组织大三的进行校企联合实训(其实就 ...
- 百度地图API提示"230错误 APP Scode校验失败"
笔者近2天在 Android Studio上玩了一下百度地图,碰到了常见的"230错误 APP Scode校验失败",下面我来介绍一下具体的解决办法. 1.在andriodstud ...
- Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码
主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: #include <stdio.h> #include <sys/types. ...
- tomcat + jenkins启动tomcat后打开jenkins页面提示404错误的解决方案
首先下载tomcat和jenkins,将下载的jenkins2.12 war放到tomcat的webapps文件夹下后执行/bin文件夹下的start启动后,打开http://localhost:80 ...
- 关于源码编译每次提示有错误 要make update-api
最近编译newline的版本的时候..同事修改了andoid默认输入法为百度.这是系统自动提供的API,所以每次编译会提示 此时在编译源码生成SDK的过程中会出现这个问题:************** ...
随机推荐
- [转载] C++ 程序员快过来围观:非常实用全面的 C++ 资源
原文: http://codecloud.net/c-plus-plus-resource-2983.html 绝对是c++开发者的福音啊, 必须推荐. 这次的资源涉及到了标准库.Web应用框架.人工 ...
- Generator 函数的含义与用法
Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行). function* gen(x){ var y = yield x + 2; return y; } ...
- 简明Vim练级攻略(转载)
前言 今天看到这篇文章,共鸣点非常多.它把Vim使用分为4个级别,目前我自己是熟练运用前面三级的命令,在培养习惯使用第四级.完全就是我这一年来坚持使用Vim的过程.所以不管怎么我要转载这篇文章.翻译自 ...
- 在VNC中Xfce4中Tab键失效的解决方法
说明 在Ubuntu Server 14.04上安装了xfce4桌面环境,但是却发现在终端中Tab键不能自动补齐(但是Ctrl + I 仍然可以用). 出现这种情况的原因是,由于Tab键的功能被窗口快 ...
- Java中HashMap案例
package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class MapTest { pu ...
- python中的最最最基本语法(1)
注意:对于我这个以前用c/c++的同学来说,可能一开始学习pyhon时有点不适应的,为什么呢?因为吧,python中,没有这玩意:{},也不用每句话才用分号分开的.python中通过缩进来分块的,一行 ...
- LINUX多线程(一)(创建和退出)
1. Linux多线程概述 1.1. 概述 进程是系统中程序执行和资源分配的基本单位.每个进程有自己的数据段.代码段和堆栈段.这就造成进程在进行切换等操作时都需要有比较负责的上下文切换等动作.为了进一 ...
- phalcon: 查找记录(Finding Records)可用的查询设置如下:
可用的查询设置如下: 参数 描述 举例 conditions Search conditions for the find operation. Is used to extract only tho ...
- jmeter笔记5
性能测试是任何分布式或Web应用程序测试计划的重要组成部分.在计划和开发周期中进行性能评价,可以保证交付给客户的应用程序满足客户对于高负载.可用性和可伸缩性的要求.提前确定软件的负载限制可以为适当地进 ...
- R语言与正态性检验
1.Kolmogorov-Smirnov正态性检验 Kolmogorov-Smirnov是比较一个频率分布f(x)与理论分布g(x)或者两个观测值分布的检验方法,若两者间的差距很小,则推论该样本取自某 ...