我是C语言的新手,并且对指针和动态内存分配有些困惑。我想做的是从命令行参数中读取并将其存储在动态内存分配中。然后将它们打印出来。例如,如果我键入./rpd 4 3 2 3 8,则argv [1](4)应减1,其他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;
}


如果这让我有些困惑(或天真),我感到抱歉。但是我对这种语言非常陌生,因此我仍在努力掌握所有内容。

非常感谢您的帮助:)

最佳答案

尝试这样的事情:

#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;
}


然后根据您的需要进行调整。您不需要为第一个输入参数指定人数,因为这是为每个人指定的汽车数量所暗示的。

08-16 02:14