Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Char*函数从不返回值_C - Fatal编程技术网

Char*函数从不返回值

Char*函数从不返回值,c,C,我是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(HttpPo

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

}
所以,基本上,如果过程在“else”中,它应该返回一个指向调用者的char指针。我检查调试器。HttpPostBody_IE有一个值,但返回时为空字符串

char* http_body = HTTP_POST_GET_BODY(recieve_buffer);

有人对此有想法吗?

您声明指针变量
HttpPostBody\u 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);
}

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

您声明了指针变量
HttpPostBody\u 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*HttpPostBody\u IE指向此指针的是什么。。。。?指针的范围是什么?你是什么意思?是因为我没有为它分配空间吗?我试图为它分配一个空间,但如果我释放了它,它就不能返回。如果我只是返回,内存没有释放,为什么要释放一个以后要使用的内存?。。。。毫无意义
malloc
http\u body
不再需要使用它并释放它,因为“{”和“}”定义了“范围”。在“范围”内声明的变量将在大括号外“超出范围”。通常,这些变量驻留在堆栈或寄存器中,当您离开“作用域”时,其内容可能会被丢弃指向此指针的是什么。。。。?指针的范围是什么?你是什么意思?是因为我没有为它分配空间吗?我试图为它分配一个空间,但如果我释放了它,它就不能返回。如果我只是返回,内存没有释放,为什么要释放一个以后要使用的内存?。。。。毫无意义
malloc
http\u body不再需要使用它并释放它,因为“{”和“}”定义了“范围”。在“范围”内声明的变量将在大括号外“超出范围”。通常,这类变量驻留在堆栈或寄存器中,当您离开“作用域”并选中
malloc
return…时,其内容可能会被丢弃。不要在ye中强制转换
malloc
return,但我如何释放此空间?@LPs您的意思是什么?不要在c中强制转换malloc return?free(…);它可能会引起问题;我刚刚编辑了我的答案。我知道免费的(…)。但是,如果我不想释放函数外的空间,我该怎么办?并选中
malloc
return…,不要在ye中使用
malloc
return,但我该如何释放此空间?@LPs你是什么意思?不要在c中使用malloc return?free(…);它可能会引起问题;我刚刚编辑了我的答案。我知道免费的(…)。但是如果我不想释放函数外的空间,我该怎么办呢。