首页 > 解决方案 > 无法在 C 中正确使用 strstr()

问题描述

所以我正在用 C 语言构建一个 Web 服务器。我想使用正则表达式解析请求,但目前我想我会尽快做一些事情让它首先工作。目前,我正在实现 cookie 并查找请求是否具有我正在使用的 cookie 字段。

int find_cookie(const char * request){
    char * start_pointer = NULL;
    long ret = 0;

    if ((start_pointer = strstr(request, "Cookie:") != NULL)){
        //Do stuff with the pointer
        //such as using strtol to get the value as a number
        ret = strtol(start_pointer + strlen("Cookie:"), NULL, 10);
    }else return 0;

    return (int) ret;
}

现在,人们会认为问题出在 strtol() 上。但是,在使用 GDB 之后,我注意到当没有 cookie 字段时,它返回 NULL(如预期的那样)但是,另一方面,如果它在那里并且我尝试打印 start_pointer 的值,它将打印:“无法访问内存地址 0x1”。这是怎么回事?顺便说一句,当我调试程序时,我可以看到请求变量包含整个请求,并且我在最后添加了一个 '\0'。

标签: cstringglibc

解决方案


您的操作顺序错误。试试这个:

if ((start_pointer = strstr(request, "Cookie:")) != NULL){

否则,您将设置start_pointer为比较结果,即1(true)。


推荐阅读