我遇到分段错误我无法隔离故障源。我相信由于某种原因,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没有获得价值。我以前使用过这个完全相同的解析代码并且它运行得很好。通常分段错误很容易(访问你不应该访问的内存位置),但我没有理由不能访问我的命令行参数。
答案 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] );
}
在此处阅读printf
:http://en.cppreference.com/w/c/io/fprintf