c - 无法在 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'。
解决方案
您的操作顺序错误。试试这个:
if ((start_pointer = strstr(request, "Cookie:")) != NULL){
否则,您将设置start_pointer
为比较结果,即1
(true)。
推荐阅读
- acumatica - 更改列过滤器的默认选项
- python - ImportError:动态模块没有定义模块导出函数(PyInit_cv_bridge_boost)
- ssl - telegram bot webhook 自签名证书问题
- python - Jupyter 实验室:UnicodeDecodeError:“charmap”编解码器在启动时无法解码字节
- angular - 如何在 Angular 中为来自 API 的响应编写单元测试
- asp.net-mvc - 实体框架尝试在已经存在的生产服务器上创建数据库
- node.js - 使用带有 npm 的护照包可以从客户端更改 req.user 对象吗?
- angular - Angular - 用于同一组件中的两个元素时,ngx剪贴板抛出错误
- flutter - 取消飞镖中的请求
- python - 没有数据库的烧瓶登录