微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

strtok 无法找到换行符 ("\n")

如何解决strtok 无法找到换行符 ("\n")

功能如下:

int parse_headers(c_request *req,char *raw_headers) {
    char *command_line;
    char *raw_header;

    req->headers = NULL;

    command_line = strtok_r(raw_headers,"\\n",&raw_headers);
    printf("command line = [%s]\n",command_line);
    if (parse_command(req,command_line) < 0)
        return -1;
    while ((raw_header = strtok_r(raw_headers,&raw_headers))) {
        printf("\nraw header = [%s]\n",raw_header);
        parse_header(req,raw_header);
    }
    return 0;
}

raw_headers 等于:

POST www.google.fr HTTP/1.1\nUser-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)\nHost: www.tutorialspoint.com\nContent-Type: text/xml; charset=utf-8\nContent-Length: 38\nAccept-Language: en-us\nAccept-Encoding: gzip,deflate\nConnection: Keep-Alive\r\n\r\n<?xml version='1.0' encoding='utf-8'?

所以strtok找到第一个\ncommand_line等于POST www.google.fr HTTP/1.1),但是在while循环中,当我打印raw_header时,它打印我raw header = [User-Age] 而不是 raw header = [User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)]

我该怎么做才能解决这个问题?

解决方法

"\\n" 指定的分隔符 strtok_r 由两个字符组成:'\\''n'n后面有一个User-Age,所以数据在那里被截断。

您应该使用 "\n" 来让 strtok_r 搜索 LF。

如果您确实想用多字符字符串 "\\n" 分隔数据,那么 strtok_r 不适合。您应该手动执行此操作,也许使用 strstr()

,

嗯....您使用的是由反斜杠 (\) 和字符 n 组成的分隔符,而不是新行(新行必须写为 \n,而不是 \\n。您可以尝试检查它如何解析带有 n 或反斜杠的字符串,您将看到它如何在这两个字符处断开字符串。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。