这里有一个c程序:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main(int argc, char* argv[]) {
int i;
int forparam = sizeof(argv);
if (argc > 1) {
for (i = 1; i < forparam; i++) {
if (i == 1) {
printf("%s", argv[i]);
}
if (i > 1) {
printf(" %s", argv[i]);
}
}
}
else {
printf("One argument expectedn");
}
}
你在Win10命令行中输入文件名和一个参数,它会将参数打印到命令行中。至少这是它应该做的。它不能接受超过3个参数如果你输入1或2个参数它会打印出来但是会加上"(null)"最后。我怎样才能让它工作呢?因为空格表示另一个参数,它忽略了它,这就是我需要所有这些代码的原因。非常感谢您的帮助!
sizeof(argv)
给出了argv
指针对象的字节大小,而不是它所指向的元素的数量。
argc
提供命令行上的参数数量,其中argv[0]
是用于调用程序的命令:
int main( int argc, char **argv )
{
printf( "Command used to invoke program: %sn", argv[0] );
for ( int i = 1; i < argc; i++ )
printf( "parameter %d: %sn", i, argv[i] );
}
你不需要forparam
,你需要的一切都有argc
:
int main(int argc, char* argv[]) {
if (argc > 1) {
int i;
for (i = 1; i < argc; i++) {
if (i == 1) {
printf("%s", argv[i]);
} else if (i > 1) {
printf(" %s", argv[i]);
}
}
return EXIT_SUCCESS;
} else {
printf("One argument expectedn");
return EXIT_FAILURE;
}
}
而且,sizeof argv
返回的是指针argv
的大小,而不是argv
的元素数(编译器不知道这一点)。
注意,sizeof(argv)
是在编译时计算的,可能是4(字节),也可能是8(字节)。我想是8。
然后使用i=1
执行for
循环,然后使用i=2
直到i=7
你可能需要for (i = 1; i < argc; i++)
阅读现代C,更多信息请参阅C参考。
从现有自由软件的C源代码中获得灵感,特别是GNU coretils。