所以我写了这个小程序,我是新手。它打印出我给它的命令行参数。在我将i变量初始化为1之前,我只是不明白为什么它有效,但是当我改变它时我得到了一个分段错误。
代码:
#include<stdio.h>
int main ( int argc, char *argv[] )
{
if ( argc > 1) {
printf( "Filename: %s has %d arguments.", argv[0], argc );
} else {
printf ("No arguments found!");
getchar();
return 0;
}
int i = 1;
printf( "The arguments are: \n" );
for ( i < argc; ++i;) {
printf( "Argument %d is: %s \n", i, argv[i] );
}
getchar();
return 0;
}
我从未见过任何说明命令行参数在使用后发生的事情。然而,在我对它们使用printf()之后,我的假设是命令行参数发生了什么。当计数器变量i初始化为零时,它第一次工作。当我通过将i初始化为1来重新编程程序以跳过零eth时,参数给了我分段错误。我这样做是因为我对发生的事情感到有些困惑。它没有像我想象的那样第二次打印出文件名,但我还是改变它所以它无论如何都没有(很有意义吗?不是回想起来的哈哈)。
答案 0 :(得分:2)
你的for循环被破坏了:
for(;i<argc;++i)
第一个块是初始条件,第二个块是每次迭代之前执行的检查。正如你所写的,检查是++ i,即使在最后一个参数之后也是如此。
答案 1 :(得分:0)
使用for ... next循环的正确方法是这样的(对于C 1990/1989):
int i;
printf( "The arguments are: \n" );
for ( i = 0; i < argc; i++) {
很多人抱怨我对语法缺乏了解。我知道如何写一个for ... next循环。我用C ++写了很多,C几乎没有什么不同。我按照编译器警告进行了调整,但没有真正考虑我在做什么或检查其他人是否有同样的问题。
因为我使用GCC的编译器不完全支持C99,所以我选择坚持使用C90作为我的编译选项。我只是在学习C而且我发现它很像C ++(很奇怪),但我并不认为我对C或其先前版本有所了解。
答案 2 :(得分:-1)
如果您正在使用C,那么首先应该初始化声明并初始化i,如果您更改int i = 1的位置
,则表明您的程序正常工作