为什么我会得到一个“;存储大小为';不知道”;这个C程序有错误吗?

为什么我会得到一个“;存储大小为';不知道”;这个C程序有错误吗?,c,C,这是我的代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <curl/curl.h> #include <curl/types.h> #include <curl/easy.h> char test[]; size_t write_data(char *ptr, size_t

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
char test[];
size_t  write_data(char *ptr, size_t size, size_t nmemb, FILE *stream)
{
  char buf[size*nmemb+1];
  char * pbuf = &buf[0];
  memset(buf, '\0', size*nmemb+1);
  size_t i = 0;
  for(;  i < nmemb ; i++){
    strncpy(pbuf,ptr,size);
    pbuf += size;
    ptr += size;
  }

  printf("%s",buf);
  test=new test[size*nmemb+1];
  return size * nmemb;
}

int main()
{
    CURL *curl_handle;
    curl_handle = curl_easy_init();

    curl_easy_setopt(curl_handle,   CURLOPT_URL, "http://www.google.com");
    curl_easy_setopt(curl_handle,   CURLOPT_NOPROGRESS  ,1);
    curl_easy_setopt(curl_handle,   CURLOPT_WRITEFUNCTION,&write_data);
    curl_easy_perform(curl_handle);
    curl_easy_cleanup(curl_handle);
    return 0;
}

更改<代码>字符测试[]至<代码>字符*测试

测试=新测试[size*nmemb+1]

这是C++代码,不是C。 换成

test = malloc(size*nmemb+1);
此外,建议在某个地方释放它。可能是在主管道末端或分配之前

free(test);
祝你好运

char buf[size*nmemb+1];
是C99不是C89。对于更大的nmemb->堆栈溢出,这里最好也使用dyn。分配

char *buf = calloc(1,size*nmemb+1), *pbuf = buf;
size_t i = 0;
if( !buf )
  { error-handling needed }
...
free(buf);

它是有效的…如果我返回的测试显示错误,我如何访问主函数中的测试值?#Ial测试是全局的,您可以像访问任何局部变量一样访问它。但问题是,为了让测试包含数据,必须点击回调。这可能需要添加更多的代码。错误的问题:这与动态内存分配无关1。这不是C代码,正如你的建议,它更类似于C++。2.使用全局变量被认为是不好的做法。如果你真的想让你的程序是C而不是C++,那么重命名它,使它只是.c作为一个扩展。这里,编译器将其视为C++。
char *buf = calloc(1,size*nmemb+1), *pbuf = buf;
size_t i = 0;
if( !buf )
  { error-handling needed }
...
free(buf);