如何通过命令行和C遍历argv

时间:2018-02-24 00:27:37

标签: c

#include <stdio.h>

int main(int argc, char **argv) {
    if (argc != 2) {
        fprintf(stderr, "usage: one file only", argv[0]);
        return (1);
    } else {
        for(int i = 0; i < argc; i++) {
            putchar(argv[i]);
        }
    }

}

说我想打印它所带来的输入,例如

$ gcc -Wall fileabove.c 
$ ./a.out abcdefghijlmn
abcdefghijlmn

基本上只打印出我放入的任何文字。

1 个答案:

答案 0 :(得分:3)

putchar(argv[i]);

不正确,因为putchar需要单个字符(类型char),您传递的是指针(char*)。它应该是

puts(argv[i]);

所以正确的代码:

#include <stdio.h>

int main(int argc, char **argv) {
    if (argc != 2) {
        fprintf(stderr, "usage: one file only\n", argv[0]);
        return 1;
    }

    // no need for the else
    // you exit program anyway if argc != 2
    // makes code more readable

    puts(argv[1]);

    return 0;
}

如果您想逐个字符地打印:

#include <stdio.h>

int main(int argc, char **argv) {
    if (argc != 2) {
        fprintf(stderr, "usage: one file only\n", argv[0]);
        return (1);
    }

    for(size_t i = 0; argv[1][i] != '\0'; ++i)
        putchar(argv[1][i]);

    putchar('\n');

    return 0;
}

修改已将puts("")更改为putchar('\n')并删除strlen,正如Jonathan Leffler在评论中提到的那样。