为什么我会得到一个“;存储大小为';不知道”;这个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);