如何解决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
找到第一个\n
(command_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 举报,一经查实,本站将立刻删除。