有没有办法接受所有参数作为一个字符串?
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);
}
这只是想法,可以更有效地完成它 - 例如,不使用 strcat 或更有效地分配内存。但想法是一样的。也可以不加最后的space(吹毛求疵的)
回显一个空行,在Windowscmd
中,最好的方法是echo(
,但也常见的有echo/
、echo.
等更多变化。
(最适合 cmd
)echo(
在 DOS 中不起作用(导致 bad command or filename
错误),但 echo/
即使在 DOS 中也能正常工作。
例如,
输入:
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);
}
这只是想法,可以更有效地完成它 - 例如,不使用 strcat 或更有效地分配内存。但想法是一样的。也可以不加最后的space(吹毛求疵的)
回显一个空行,在Windowscmd
中,最好的方法是echo(
,但也常见的有echo/
、echo.
等更多变化。
(最适合 cmd
)echo(
在 DOS 中不起作用(导致 bad command or filename
错误),但 echo/
即使在 DOS 中也能正常工作。