有没有办法接受所有参数作为一个字符串?

Is there any way to accept all the parameters as a single string?

例如,

输入:

echo( hello world

计划:

#include<stdio.h>

int main(int n,char** args){
// Replace all the '[=11=]' with ' '
system(args[1]);
return printf("\n");
}

输出:

hello world

现在我需要一个指针中的 hello world。

我知道 **char 没有按照我想要的方式工作..

但是有没有什么有效的方法,而不是计算每个参数的长度,分配那么多字节,然后将其连接到分配的内存中?

可能是 char** 的一些访问说明符?

我正在尝试向 DOSBox 添加 echo( 一个命令,所以基本上 echo params 然后打印一个换行符。就是这样。

此外,是否有任何方法可以排除以识别没有任何空格的 exe,或者它是特定于控制台的?

我想要一种方法来获取单个指针中的所有参数,一个在末尾终止的字符串。

使用任一形式的 main() 函数:

int main(int argc, char *argv[]) {...};
int main(int argc, char **argv) {...};

C main() 函数的等效签名,将允许您传递任意数量的参数,每个参数的大小不限。如果你想传递一个包含许多参数的字符串,只需传递一个带有某种分隔符的字符串。如果定界符是 space ( " " ),那么根据 behavior of the C main() function command line argument 的定义,需要用 ":

包围它们

假设你的 exe 名称是 prog.exe

prog this,is,one,argument
prog "this is one argument"  //double quotes provide cohesion between space delimited command line arguments 
prog this-is-one-argument

将全部包含在一个变量中:argv[1]

如果你将其编译为 echo.exe,它将把输入 stdin:

的任何内容放入 stdout
int main(int argc, char **argv)
{
  if(argv != 2) return 0;
  fputs(argv[1], stdout);
  return(0);
}

用法:echo "this will be echoed onto stdout"<return>
用法:abc000<return>
用法:this-is-one-argument<return>

写成一行。

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char oneline[256] = "";
    for(int index = 1; index < argc; index++) 
    {
        strcat(oneline, argv[index]);
        strcat(oneline, " ");
    }

    printf("parameters: "%s"\n", oneline);
}

https://godbolt.org/z/B4ULLB

这只是想法,可以更有效地完成它 - 例如,不使用 strcat 或更有效地分配内存。但想法是一样的。也可以不加最后的space(吹毛求疵的)

回显一个空行,在Windowscmd中,最好的方法是echo(,但也常见的有echo/echo.等更多变化。

(最适合 cmdecho( 在 DOS 中不起作用(导致 bad command or filename 错误),但 echo/ 即使在 DOS 中也能正常工作。