具有永不返回的C字符串的函数
我是新来的。我有一个问题,我完全不知道是什么原因造成的! 我希望有人能帮助我。 我正在开发一个带有套接字的小型TCP服务器,它接收来自客户端的字符串,并且必须对其执行一些操作。 程序在此功能中保持被阻止状态,并且永远不会返回:具有永不返回的C字符串的函数,c,string,malloc,strtok,C,String,Malloc,Strtok,我是新来的。我有一个问题,我完全不知道是什么原因造成的! 我希望有人能帮助我。 我正在开发一个带有套接字的小型TCP服务器,它接收来自客户端的字符串,并且必须对其执行一些操作。 程序在此功能中保持被阻止状态,并且永远不会返回: int parse_request(char * request, char *start, char**headers, char *body) 该函数的核心是两个嵌套strtok()的组合: 程序在打印“body-ignored”或“body:%s\n,body”后
int parse_request(char * request, char *start, char**headers, char *body)
该函数的核心是两个嵌套strtok()的组合:
程序在打印“body-ignored”或“body:%s\n,body”后立即阻塞
有人有主意吗?我真的有麻烦了!
谢谢
编辑:这可能是我创建和传递参数的方式吗
char command[] = "\0", body[] = "\0";
char **headers;
headers = malloc(8192);
if (!headers) {
printf("Error in malloc()");
closesocket(s);
}
int x = parse_request(buf, command, headers, body);
这是因为你没有改变
行
,所以你在循环时陷入了。再看看。赋值line=strtok\u r(NULL、\n、&saveptr1)代码>在循环中,而循环中。每循环一行都会更改。问题只出现在最后一个循环中(通常在6-7次之后)。可能永远都没有达到退出条件,但我真的不知道为什么。这与问题无关,但是表单body[strlen(line)]='\0'的代码行代码>是不必要的,因为它是当前编写的。body和line指向同一个内存,strlen实际上返回空终止符的位置,因此赋值没有影响(因为body==line)。你说得对!我删除了那些不必要的语句。如果你希望人们关注的不仅仅是琐碎的语法问题,请发表一篇文章。就目前情况而言,非NUL结尾的输入字符串可能有问题,或者输入中可能存在一些您没有考虑的奇怪内容。根据您传递参数的方式,command
和body
是函数的输入,对函数内部的本地start
和body
所做的更改将不会影响用于传递值的变量……伙计们,我要感谢大家的帮助。我发现了问题的关键:我假设代码被阻止了,因为它停止打印他的输出,但现在我意识到问题在于标准输出缓冲区!
char command[] = "\0", body[] = "\0";
char **headers;
headers = malloc(8192);
if (!headers) {
printf("Error in malloc()");
closesocket(s);
}
int x = parse_request(buf, command, headers, body);