我试图从针对我的"自制的"的http请求中标记字符串时遇到这个小问题。 Http服务器。
基本上我正在使用这些代码行进行tokneize。
token = strtok(bufptr, "\n");
while(token != NULL){
printf("%s \n", token);
token = strtok(NULL, "\n");
}
问题是对于每个令牌,第一个字符都从标记化字符串中删除。我该如何解决这个问题?
我试过复制字符串,我尝试过使用strstr,但我还没有成功。我敢打赌,我做错了很容易。
最好的问候。
答案 0 :(得分:3)
字符串中有'\r'
。 (@Alessandro Suglia)
printf("%sx\n", "abc\r"); // x substituted for space
打印:
xbc
'\r'
(返回)将打印位置移动到行的开头。然后'x'
覆盖'a'
。这显示为OP观察到“第一个字符从标记化字符串中删除”。
答案 1 :(得分:0)
这很好用:
char bufptr[] = "aaaa\nbbbb\ncccc\nddd";
char *token;
token = strtok(bufptr, "\n");
while(token != NULL){
printf("%s \n", token);
token = strtok(NULL, "\n");
}
输出是:
aaaa
bbbb
cccc
ddd
答案 2 :(得分:0)
我使用\ r \ n作为分隔符而不是仅使用\ n来实现它 我不认为UNIX发送了\ r \ n换行,但似乎确实如此?无论如何,谢谢。
答案 3 :(得分:0)
对于遇到此问题的其他人。 HTTP协议在标题行之后使用\ r \ n分隔符,并使用CRLN从标题中分隔正文。按照我的理解,CRLN是\ r \ n \ r \ n。
从我在网上搜索,我没有找到很多关于协议的简单可读信息。当然,你确实有RFC。
感谢大家的帮助。顺便说一句,我永远无法弄清楚如何接受答案。