0

私は言語 C にかなり慣れていないので、ポインターと動的メモリ割り当てに少し混乱しています。私がやろうとしているのは、コマンド ライン引数を読み取り、それらを動的メモリ割り当てに格納することです。次にそれらを印刷します。たとえば、./rpd 4 3 2 3 8 と入力すると、argv[1] (4) が減分され、他の 3 つの値 (3、2、3、8) が続くはずです。出力は次のようになります。

人 1 は 3 台の車を持っています。人 2 は 2 台の車を持っています。人 3 は 3 台の車を持っています。人 4 は 8 台の車を持っています。

私のコードは次のとおりです。

  #include <stdio.h>

int main(int argc, char *argv[]) {
    /** argc is number of arguments at command line*/
    /** argv[] is an array of pointers to character strings
        i.e. argv 1 points to argc 1 */
    int numberOfCars;
    char *person;
    int i;
    int j;

    // Allocate the size of the array for each element of char
    person = malloc(sizeof(numberOfCars) *argc);

    for(i = 2; i < argc; i++) {
        /** Convert char to int */
        numberOfCars = atoi(argv[i]);
        person = atoi(argv[1]);
        if(person > 0){
            for(j = 2; j < person; j--) {
                printf("Person %d has %d cars \n", person--, numberOfCars);
            }
        } else {
            /** DO NOTHING */
        }
    }
    return person;
}

これが私にとって少し混乱している(または素朴な)場合は申し訳ありません。しかし、私はこの言語に非常に慣れていないので、まだすべてを理解しようとしています。

助けてくれてありがとう:)

4

4 に答える 4

1

次のようなことを試してください:

#include <stdio.h>

int main(int argc, char *argv[]) {
    /** argc is number of arguments at command line*/
    /** argv[] is an array of pointers to character strings
        i.e. argv 1 points to argc 1 */
    int numberOfCars;
    int i;

    for(i = 1; i < argc; i++) {
        /** Convert char to int */
        numberOfCars = atoi(argv[i]);
        printf("Person %d has %d cars \n", i, numberOfCars);
    }

    return 0;
}

次に、必要に応じて微調整します。最初の入力引数に人数を指定する必要はありません。これは、各人に指定した車の数によって暗示されるためです。

于 2013-11-10T17:46:03.390 に答える
0

何を動的に保存しますか? 問題で述べたように値のみを印刷したい場合。動的割り当てはまったく必要ありません。

どうしても保存したい場合は、char **person; を使用します。// *person の代わりに使用して、1 人あたりの割り当てメモリを保持します

person[i] = malloc(sizeof(argv[i])+sizeof("人は車を持っています")); //保存するために必要な形式がわからない場合は、それに応じて変更できます

于 2013-11-10T17:58:06.350 に答える