c - 堆栈溢出(大约 "evhttp_uri_parse")

标签 c libevent

代码实现了读取文件(包含大量url)的功能,每个url都通过“evhttp_uri_parse”获取主机和路径。但是有一个错误,evhttp_uri_parse解析失败,返回NULL。可能原因是堆栈溢出。

FILE *fp=fopen(argv[1],"rb");
if(NULL==fp)
{
    printf("open url_file is error %d::%s\n",errno,strerror(errno));
    return 0;
}
char url_buf[2048];
memset(url_buf,'\0',sizeof(url_buf));

fgets(url_buf,sizeof(url_buf),fp);
while(!feof(fp))
{
    if(strlen(url_buf)>1)
    {
        printf("url_buf::%s",url_buf);
        #if 1 
        struct evhttp_uri *ev_uri=NULL;
        ev_uri=evhttp_uri_parse(url_buf);
        if(ev_uri==NULL)
        {
            printf("parse uri  error::%d,%s\n",errno,strerror(errno));
        }
        const char *host=evhttp_uri_get_host(ev_uri);
        const char *path=evhttp_uri_get_path(ev_uri);
        printf("query host::%s,path::%s\n",host,path);
        evhttp_uri_free(ev_uri);
        #endif
    }
    memset(url_buf,'\0',sizeof(url_buf));
    fgets(url_buf,sizeof(url_buf),fp);
}
fclose(fp);

最佳答案

  1. fgets(url_buf,sizeof(url_buf)+1,fp) 应更改为 fgets(url_buf,sizeof(url_buf),fp)

  2. fgets 在字符串末尾添加“\n”。尝试删除它,看看是否有帮助。

关于c - 堆栈溢出(大约 "evhttp_uri_parse"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28447874/

相关文章:

c++ - 使用 libevent 或 boost::asio 在单线程中建立多个 tcp 连接。这是可能的?

C++ libevent 用法(内存泄漏和删除运算符)

c++ - 带有 C++11+ unique_ptr 的 Libevent

c - Makefile会忽略源文件

c - 结构数组改变内容本身

c - C中复杂定义的一个例子

c++ - 通过 UV4L 数据通道的 unix 域套接字发送数据

php - 使用 ZeroMQ 不等待服务器响应

c - 使用 NBIO 的高效预 fork 服务器设计,例如使用 libevent 的 epoll、kqueue

c - 不透明的 C 结构 : various ways to declare them