具有永不返回的C字符串的函数

具有永不返回的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”后

我是新来的。我有一个问题,我完全不知道是什么原因造成的! 我希望有人能帮助我。 我正在开发一个带有套接字的小型TCP服务器,它接收来自客户端的字符串,并且必须对其执行一些操作。 程序在此功能中保持被阻止状态,并且永远不会返回:

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);