2010-08-27 33 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); 
相關問題