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

问题描述

我这里有这个 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 源代码中汲取灵感。