解析命令行参数时出现分段错误

时间:2013-12-06 03:15:09

标签: c command-line-arguments

我遇到分段错误我无法隔离故障源。我相信由于某种原因,argv和argc没有获得价值,但我无法弄清楚原因。

这是我的代码的第一部分。

int main(int argc, char **argv)
{
int i;
int numArrays = 0;
int test = 0;
int opt = 0;

printf ("Parsing....\n");  // This line gets printed
printf(argv);    // this one doesn't even if being flushed immediately after
printf(argc);    // when the previous line is deleted, this line also won't print
fflush(stdout); 
opt =  getopt(argc, argv, optString);  //  defined as optString = "qmc";

while (opt != -1) {
    printf (opt);
    switch (opt) {
    //prevents program from printing to a file
    case 'q':
        tofile = 1;
        break;
    // max size of the prime numbers
    case 'm':
        maxPrime = atoi(optarg);
        break;

    case 'c':
        numProcs = atoi(optarg);
        break;

    default:
        break;
    }
}

我试图找出发生了什么,但我不明白为什么argc和argv没有获得价值。我以前使用过这个完全相同的解析代码并且它运行得很好。通常分段错误很容易(访问你不应该访问的内存位置),但我没有理由不能访问我的命令行参数。

1 个答案:

答案 0 :(得分:1)

您对如何使用printf感到困惑。你目前正在做的是一个很大的禁忌:

printf(argv);
printf(argc);

该函数需要一个const char*字符串,它指定输出的格式和可选的变量参数列表。你传递的是一个双指针,它不是一个字符串,而是一个整数,它甚至都不是一个指针!

你想要这样的东西:

printf( "Number of arguments: %d\n", argc );
for( int i = 0; i < argc; i++ ) {
    printf( "Arg %d: %s\n", i, argv[i] );
}

在此处阅读printfhttp://en.cppreference.com/w/c/io/fprintf