繁体   English   中英

Char *功能从不返回值

[英]Char* function Never Return value

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

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

}

因此,基本上,如果该过程在“其他”中执行,则应返回一个指向调用方的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);
}

请注意,通过这种方式,变量必须是静态的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM