首页 > 解决方案 > C中的命令行参数

问题描述

当我给我的程序参数“2”或“3”时,我得到了分段错误。它应该打印 That's number 2/3。这里有什么错误?

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

int main(int argc, char *argv[]) {
    if (argc > 1) {
        if (*argv[2] == '2') {
            printf("That's number two!");
        }       
        else if (*argv[2] == '3') {
            printf("That's number 3!");
        }   

        else
            printf("Error.\n");
    }
    else
        printf("No input given.\n");
    return 0;
}

当我运行程序时,我输入 ./Test 2 或 3。我找不到错误,而且 gcc 也不会给出错误/警告。谢谢。

标签: cparameters

解决方案


argv是一个数组:

argv[0] // the name of the executable
argv[1] // the first argument
argv[...]

当你这样做时:

if (*argv[2] == '2')

你被调用了./Test 2,只有一个参数,所以argv[2]是越界访问。

有关详细信息,请参阅主要功能


推荐阅读