【问题标题】:(newbie) strstr() returns null with unsigned param(新手)strstr() 使用无符号参数返回 null
【发布时间】:2012-08-18 14:05:54
【问题描述】:

我对这段代码有问题>

int parse_useragent (unsigned char* buf )
{
    int i;
    for (i=1; i < 200; i++)
    {
        printf("%c ", buf[i-1]); // this prints string with "User-Agent" inside
    }

    unsigned char * scanner = strstr(buf, "User-Agent:"); //returns NULL?

    if (scanner == NULL)
    {
        printf("NULL!!! /n");
        return DEFAULT_USERAGENT;
    }

    /* ... */

strstr 函数返回 NULL,尽管子字符串在那里... 我认为 unsigned char* buf 有问题,有什么方法可以快速转换,以便我可以使用strstr 函数?

【问题讨论】:

  • 您说,那个 buf 包含“User-Agent”(不带冒号),但您正在搜索“User-Agent:”(带冒号)
  • 我怀疑签名是否会成为问题,因为当您将 buf 作为参数传递时,它会被转换为 char*
  • 首先,buf 是否保证为空终止?此外,您的 strstr() 将匹配一行中间的 User-Agent:
  • Cyber​​Dem0n : 尝试与“用户”一起出现同样的问题 Michal : 不保证被 null 终止...
  • 我解析http包数据,所以buf中不包含疯狂的东西……

标签: c string parsing pointers unsigned


【解决方案1】:

正确打印缓冲区以了解可能出现空字符的位置:

printf("%s\n", buf);

你的方法有几个问题:

  • buf[0] 可能已经是一个空字符,C 中的数组从 0 开始而不是 1
  • %c 遇到空字符时可能不打印任何内容
  • strstr 在第一个空字符处停止

【讨论】:

  • 这有帮助,它没有显示我在按字符打印时看到的任何内容,谢谢...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2011-08-20
  • 2013-12-13
  • 2016-09-15
相关资源
最近更新 更多