2016-05-02 4 views
0

ベクトルのすべての要素が3番目のパラメータからコマンドラインから取得されるベクトル(動的に割り当てられる)を作成したかったのです。Cで配列をナビゲートするためのポインタに関する問題

私はこれを書いた:問題は、最初のパラメータだけが他人ないが、コマンドラインから取られているように見えるということです

#include <stdio.h> 
#include <stdlib.h> 

int main(int argn, char* argc[]) { 
    if (argn < 4) { 
     printf("Error: invalid parameter number. \n"); 
     return 0; 
    } 
    float min = atof(argc[1]), max = atof(argc[2]), *v, *k; 
    int dim = argn-3; 
    char **p; 
    v = malloc(dim*sizeof(float)); 
    k = v; 
    for (p = argc+3; p < argc+dim; p++) { 
     *k = atof(*p); 
     k++; 
    } 
    for (k = v; k < v+dim; k++) { 
     printf("%3.f ",*k); 
    } 
    return 0; 
} 

を。

例:私はそれが私に27.0 0.0 0.0 0.0を返しますが、それはなぜ私のコードが動作していない私に27.0 28.0 .29.0 32.0

を返す必要があります[のProgramName] 25 30 27 28 29 32

起動します?

最終的な文法ミスで申し訳ありませんが、私は英語ではありません。

+1

'argc'よりも' argn'の方が優れている点は何ですか?クラップ、そこに 'argc'がありますが、' char * [] '... hmmm –

+1

@SouravGhoshねえ、箱から考えてください:) –

+0

@EugeneSh。ええと、混乱させて人のうち、ええ? :P –

答えて

3

あなたが書く:dim==2その後、

int dim = argn-3; 
... 
for (p = argc+3; p < argc+dim; p++) { 
... 
} 

と仮定argn==5、およびループがに沸く:

実行することはない
for (p = argc+3; p < argc+2; p++) { 
... 
} 

mainのパラメータとしてargcとargvを使用するのが普通です。これに従うと、あなたのコードは他の人に読めるようになり、他のコードはあなたに読みやすくなります。また、改行を印刷するのを忘れてしまった。

+0

ニースキャッチ! :-) – alk

+0

メインのパラメータの標準名はargnとargc [] –

+0

@AndrewJ .:あなたが好きなように実際に名前を付けることができましたが、椅子の名前をテーブルにすれば、少なくとも刺激につながります。ここの常識はC標準によって与えられます:http://port70.net/~nsz/c/c11/n1570.html#5.1.2.2.1 – alk

関連する問題