2016-11-22 17 views
0

Cでグローバル変数に問題があります。Cで文字列の配列を作成する必要があります。文字列の数は、シェルによって渡された引数(number_of_string = atoi(argv[1])) 。だから私はこれを行う最善の方法は、number_of_stringsポインタの配列であると思う。この配列のすべての要素は、mallocでdinamically予約されているメモリのセクションを指します。主な問題は、グローバル変数としてmain(argv [1]がまだ存在しない)の実行前に配列のサイズを定義する必要があることです。私はこれをどのように解決できるかわかりません。誰でも助けてくれますか?C言語のシェルからグローバルCHAR配列を宣言

+0

なぜ実行する前に配列のサイズを定義する必要がありますか?論理的な観点からは、実行時に文字列の数だけを知っていれば、それがどうなるのだろうか?ポインタを定義し、 'malloc'を使用して文字列ポインタを割り当てます。 – Downvoter

+0

'char ** strings'。 'string = malloc(sizeof(char *)* atoi(argv [1]));'各 'string [x]'は 'malloc(sizeof(char)* );'の結果です。何らかの理由でグローバル化したい場合は、 'char ** strings'をグローバルに定義してください。これを前に 'main()'で述べたように、または適切なところで初期化します。 – eddiem

+0

これは並行処理の練習です。私は循環バッファを作成しなければなりません。そこでは、ユーザーが決めた数の文字列(シェルで番号を渡す)を保存します。これは、プログラムを終了するために欠けている部分です。 – 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

関連する問題