2016-11-22 37 views
0

我有在C.全局變量的一個問題我要創建與C字符串字符串的數量將通過由殼傳遞的參數來確定的陣列(number_of_string = atoi(argv[1])) 。所以我認爲最好的方法是使用一組number_of_strings指針。這個數組中的每一個元素都將指向一段由malloc預留的內存。主要的問題是我需要在執行main(argv [1]還沒有存在)之前定義數組的大小,作爲一個全局變量。我不知道如何解決這個問題。誰能幫我?聲明從殼全局CHAR陣列用C

+0

爲什麼在執行之前需要定義數組的大小?從邏輯的角度來看,如果在運行時只知道字符串的數量,那麼該如何發生呢?定義指針並使用'malloc'來分配字符串指針。 – Downvoter

+0

'char ** strings'。 '字符串= malloc的(的sizeof(字符*)*的atoi(argv的[1]));每個''串[X]'然後的malloc'的結果(的sizeof(char)的* );'。如果出於任何原因,你希望它是全局的,只需要在全局定義'char ** strings'。然後按照前面在'main()'中說明的或任何適當的地方初始化它。 – eddiem

+0

這是一個併發練習。我必須創建一個循環緩衝區,我將存儲由用戶確定的一些字符串(通過shell傳遞數字)。這是完成程序缺少的部分。 – HastatusXXI

回答

0

這是否解決問題了嗎?

#include <stdlib.h> 

char **strings; 

int main(int argc, char **argv) 
{ 
    int size; 
    int i; 
    if (argc < 2) 
     return 1; 

    size = atoi(argv[1]); 

    if (size <= 0) 
     return 2; 

    strings = malloc(sizeof(char*)*size); 

    for (i = 0 ; i < size ; i++) { 
     strings[i] = malloc(sizeof(char)*100); 
    } 

    // You now have argv[1] 100-byte strings (don't forget about NULL terminators) 
} 
+0

謝謝。問題解決了!。 – HastatusXXI

+0

不要忘了釋放他們。 – WPomier