问题描述
我这里有这个 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 expected\n");
}
}
您在 Win10 cmd 中键入文件名和一个参数,它会将参数打印到 cmd 上。至少这是它应该做的。它不能占用超过 3 个参数,如果您输入 1 或 2 个参数,则会将它们打印出来,但最后会显示“(空)”。我怎样才能让它工作?因为空格表示另一个参数,所以它会忽略它,这就是我需要所有这些代码的原因。您的帮助将不胜感激!
解决方法
sizeof(argv)
为您提供 argv
指针对象的字节大小,而不是它指向的元素数。
argc
为您提供命令行上的参数数量,其中 argv[0]
是用于调用程序的命令:
int main( int argc,char **argv )
{
printf( "Command used to invoke program: %s\n",argv[0] );
for ( int i = 1; i < argc; i++ )
printf( "parameter %d: %s\n",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 expected\n");
return EXIT_FAILURE;
}
}
此外,sizeof argv
返回指针 argv
的大小,而不是 argv
中元素的数量(编译器不知道)。
请注意,sizeof(argv)
是在编译时计算的,可能是 4(字节)或可能是 8(字节)。我想是 8。
然后你的 for
循环用 i=1
执行,然后用 i=2
执行,直到 i=7
您可能想要for (i = 1; i < argc; i++)
阅读Modern C并查看this C reference了解更多信息。
从现有 free software,特别是 GNU coreutils 的 C 源代码中汲取灵感。