gpt4 book ai didi

Char* 函数从不返回值

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:20 27 4
gpt4 key购买 nike

我是 C 的新手。在这里我编写了一个函数来解析来自浏览器的 http post。这是我的代码:

char* HTTP_POST_GET_BODY(char* HttpPost){

char* HttpPostBody = strstr(HttpPost,"\r\n\r\n");
HttpPostBody = HttpPostBody + 4;
if(strcmp(HttpPostBody,"\r\n\r\n") != 0 && strcmp(HttpPostBody,"") != 0){
return HttpPostBody;
}
else{
char* HttpPostBody_IE;
HttpPostBody = strstr(HttpPost,"::");
char* HttpPostBodyEnd = strstr(HttpPost,"HTTP/1.1");
int body_length = HttpPostBodyEnd - HttpPostBody;
strncpy(HttpPostBody_IE,HttpPostBody+2,body_length-2);
return HttpPostBody_IE;
}

}

所以基本上,如果过程进入“else”,它应该返回一个 char 指针给调用者。我检查调试器。 HttpPostBody_IE 有一个值,但当它返回时它是一个空字符串。

char* http_body = HTTP_POST_GET_BODY(recieve_buffer);

有人对此有想法吗?

最佳答案

您声明了指针变量 HttpPostBody_IE 但从未为其分配内存。
调用 strncpy(....) 应该创建一个核心转储。试试这个:

int body_length = HttpPostBodyEnd - HttpPostBody;
HttpPostBody_IE = (char*)malloc(body_length+1);
strncpy(HttpPostBody_IE,HttpPostBody+2,body_length-2);
return HttpPostBody_IE;

当然,确保此函数的调用者之后释放分配的内存。
如果函数从 if 语句中返回,您就会遇到问题。这是因为在这种情况下没有分配内存。

你可以这样解决:

static char HttpPostBody_IE[BIG_ENOUGH_FOR_ANY_SOURCE];
if (....)
{
...
}
else
{
...
strncpy(HttpPostBody_IE, ...);
return (HttpPostBody_IE);
}

请注意,在这种方式下,变量需要是静态的。

关于Char* 函数从不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39160366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com