#include <stdio.h>
int main(int n){
int n;
printf("%d/n",n);
return 0;
}
我想知道主要论证中的论证是如何起作用的,并就这段代码的错误提出建议。
答案 0 :(得分:3)
main
函数原型只能是其中之一:
int main();
int main(int argc, char *argv[]); (*) Check my comment for this one.
int main(int argc, char **argv);
如果你看看最后两个原型,有两个论点。第一个是传递给程序的参数的数量,第二个是参数列表。第一个参数(argv[0]
)始终保留给程序名称。
所以你可以这样做:
int main(int argc, char** argv)
{
int n = 0;
if(argc > 1)
{
// Paramenters are sent as strings, so you need to cast it to the int
char *end;
n = strtol(argv[1], &end, 10);
if (*end)
{
printf("Please pass the number for the argument!");
return 0;
}
printf("%d\n", n);
}
return 0;
}
现在,您可以将该参数传递给程序(./program_name 15
)并将其打印出来。
注意: atoi
此处仅用于演示目的。
引自标准:
程序启动时调用的函数名为
main
。实施宣布否 这个功能的原型。它应该使用返回类型int和no来定义 参数:
int main(void) { /* ... */ }
或有两个参数(这里称为argc和argv,但可能有任何名称 使用,因为它们是声明它们的函数的本地函数):
int main(int argc, char *argv[]) { /* ... */ }
或等效的;)或其他一些实现定义的方式。
如果声明它们,主函数的参数应遵循以下内容 约束:
答案 1 :(得分:2)
根据语言标准,main
采用以下形式之一:
int main( void )
或
int main( int argc, char **argv ) // or char *argv[]
在第二种形式中,argc
包含传递给main
的命令行参数的数量,而argv
是包含参数本身的字符串的向量。第一个参数(argv[0]
)是用于调用程序的命令,因此argc
始终至少为1 1 。
实现可以自由地为main
定义其他签名 - 检查编译器文档。
快速而肮脏的示例:从命令行中取两个整数,添加它们并打印结果(假定为C99):
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int convert( char *arg, int *val )
{
int result = 1;
char *chk;
int x = strtol( arg, &chk, 10 );
if ( !isspace( *chk ) && *chk != 0 )
{
result = 0;
fprintf( stderr, "%s is not a valid integer!\n", arg );
return 0;
}
*val = x;
return 1;
}
int main( int argc, char **argv )
{
if ( argc < 3 )
{
fprintf( stderr, "USAGE: %s x y\n", argv[0] );
exit( 0 );
}
int x, y;
if ( convert( argv[1], &x) && convert( argv[2], &y ))
{
printf( "%d\n", x + y );
}
return 0;
}
啊,谁打破了IE的代码格式?!
<小时/> 1。这适用于所谓的托管实现;基本上,任何在操作系统下运行的东西。还有独立式实现,它们通常是嵌入式系统,并且可以任意方式自由定义程序入口点。
答案 2 :(得分:1)
要使用参数,您需要两个参数:
#include <stdio.h>
int main (int argc, char *argv[])
{
//Do someting with argv
return 0;
}
argv是一个字符串数组,它们以null结尾并包含参数(第一个参数是可执行文件的名称)。
argc是参数计数(数组argv的长度)。
您的代码可以这样工作:
#include <stdio.h>
int main(int argc, char *argv[]){
if(argc > 1)
printf("%s\n",argv[1]);
else
printf("argument missing.\n");
return 0;
}
答案 3 :(得分:1)
你应该替换你的主要功能:
int main(int argc, char* argv[]){
for(int i = 0; i < argc; i++){
printf("%s\n",argv[i]);
}
return 0;
}
然后,当您从控制台调用程序时
./foo 1 2 3
您将获得以下输出:
foo
1
2
3
答案 4 :(得分:1)
main
的参数的工作方式如下:
int main(int argc, char ** argv) {
// your code
}
您将此文件编译为二进制文件,将其称为yourbin
,然后在shell中执行它:
./yourbin arg1 arg2
argc
的值是传入的参数数量,在本例中为2,argv
是指向C字符串数组的指针,在本例中为"./yourbin", "arg1", "arg2"
因此,您的整数n
将是从命令行传入的参数数量。
答案 5 :(得分:0)
在这种情况下你不需要参数,因为你什么都不做。但是你可能需要它来做类似的事情。您的代码将无法编译,因为int main(int)
不是C提供的重载主要方法之一。
#include <stdio.h>
int anotherMethod(int a);
int main(){
int n = anotherMethod(5);
printf("%d/n",n);
return 0;
}
int anotherMethod(int a){
a = a + 5;
return a;
}
可以将参数传递给main,以便在命令行参数中使用。
答案 6 :(得分:0)