如何制作可以通过cmd访问的print.exe,并在c中接受参数



这里有一个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。

相关内容

最新更新