2012-02-19 13 views
0

私は配列を取ることをしようとしています。ユーザーからの整数値/文字列値を含み、配列の長さはわかりません。配列[500]のような、私はそれが貧しいソリューションとプログラミングスキルが劣っていることを知っている..どのように私はこれを改善するのですか?プログラムの実行中に配列のサイズを変更する/サイズを変更する最も良い方法

以下のサンプルコード:

int main(void){ 
    int t=0; 
    char str[200]; 
    int count[20]; 
    printf("Please enter the number of test cases(between 1 to 20):"); 
    scanf("%d",&t); 
    for (int i = 1; i<=t;i++) 
    { 
     printf("Please enter each of %i test case values:",i); 
     gets(str); 
     //set_create(str); 
     printf("\n"); 
    } 
    for(int i = 0;i<t;i++) 
    { 
     prinf("%i",count[i]); 
     printf("\n"); 
    } 
    return 0; 
} 

上記のコードは確かに間違っている。..コードを改善するためにいくつかの助けが必要...おかげ

編集コード:

int main(void){ 
     int T=0; 
     int *count; 
     printf("Please enter the number of test cases(between 1 to 20):"); 
     scanf("%d",&T); 
     count = malloc(T * sizeof *count); 
     for (int i = 1; i<=T;i++) 
     { 
      printf("Please enter each of %i test case values:",i); 
      fgets(count); 
      printf("\n"); 
     } 

     return 0; 
    } 

答えて

4

だけで使用必要に応じてポインタとmalloc/reallocメモリgetsを使用しないでください。安全でなく、もはや標準ではありません。代わりにfgetsを使用してください。例えば

、あなたが必要とどのように多くのcount要素わからない場合:このような状況では

int *count; 

scanf("%d", &t); 
count = malloc(t * sizeof *count); 
+0

動的に配列を割り当てるには、新規と削除を使用するとよいですか? – lakesh

+0

@lakesh C++を使用する場合のみ:-)あなたは 'c'という質問にタグを付け、あなたのコードは本当にc-ishに見えます。明確化のために – cnicutar

+0

ありがとうございます。私は上記の質問に対する答えを編集しました。今はいいですか?任意の訂正? – lakesh

1

あなたが機能alloca()と機能malloc/callocまたはスタック上でヒープ内の配列にメモリを割り当てることができます(中ヘッダ"alloca.h");

関連する問題