2010-08-27 32 views
1

这是我的代码:为什么在这个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 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; 
} 

为什么我收到此错误:

../src/get_webpage.cpp:9: error: storage size of ‘test’ isn't known 
../src/get_webpage.cpp: In function ‘size_t write_data(char*, size_t, size_t, FILE*)’: 
../src/get_webpage.cpp:23: error: expected type-specifier before ‘test’ 
../src/get_webpage.cpp:23: error: expected ‘;’ before ‘test’ 
+0

错误的问题:它不是动态内存分配 – pmod 2010-08-27 08:40:57

+0

1.这不是C代码,您的建议,它更类似于C++。 2.使用全局变量被认为是不好的做法。 – 2010-08-27 09:05:23

+0

此外,如果您确实希望程序是C而不是C++,请将其重命名为只有.c作为扩展名。在这里你的编译器将它作为C++。 – 2010-08-27 09:47:20

回答

2

变化char test[];char *test;

+0

它的工作....我如何访问主函数中的测试值,如果我返回测试它说错误??? – lal 2010-08-27 08:40:48

+0

#Ial测试是全球性的,您可以像访问任何本地变量一样访问它。但是捕捉是回调必须打包测试以包含数据。这可能需要添加更多的代码。 – 2010-08-27 08:48:50

1

测试=新的测试[尺寸* nmemb个+ 1];

这是C++代码,而不是C. 更改它

test = malloc(size*nmemb+1); 

另外建议某处释放它。也许在主要结束时或分配之前。

free(test); 

祝你好运。

0
char buf[size*nmemb+1]; 

C99不是C89。对于更大 nmemb - >stackoverflow,在这里最好也使用dyn。分配

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