C中是否存在将整个命令行选项和参数存储在单个字符串中的方法。我的意思是如果我的命令行是./a.out -n 67 89 78 -i 9
,那么字符串str
应该能够打印整个命令行。现在,我能够做的是以不同的矢量形式打印值。
#include <stdio.h>
#include <getopt.h>
#include <string.h>
int main(int argc, char* argv[]) {
int opt;
for(i=0;i<argc;i++){
printf("whole argv was %s\n", argv[i]);
}
while((opt = getopt(argc, argv, "n:i")) != -1) {
switch (opt){
case 'n':
printf("i was %s\n", optarg);
break;
case 'i':
printf("i was %s\n", optarg);
break;
}
}
return 0;
}
我想要这个,因为optarg
只打印我的第一个参数,并且我想要打印所有参数,所以我想在将它存储在字符串中后对其进行解析。
答案 0 :(得分:2)
您可以做的是遍历argv并使用strcat
char* CommandLine = 0;
unsigned int CommandLineLength = 0;
unsigned int i = 0;
for (i = 0; i < argc; i++) {
CommandLineLength += strlen(argv[i]) + 3; // Add one extra space and 2 quotes
}
CommandLine = (char*) malloc(CommandLineLength + 1);
*CommandLine = '\0';
// Todo: Check if allocation was successfull...
for (i = 0; i < argc; i++) {
int HasSpace = strchr(argv[i], ' ') != NULL;
if (HasSpace) {
strcat(CommandLine, "\"");
}
strcat(CommandLine, argv[i]);
if (HasSpace) {
strcat(CommandLine, "\"");
}
strcat(CommandLine, " ");
}
// Do something with CommandLine ...
free(CommandLine);
答案 1 :(得分:0)
这取决于平台。
在Windows中,您可以使用GetCommandLine()
。
答案 2 :(得分:-1)
只需编写如下函数:
char * combineargv(int argc, char * * argv)
{
int totalsize = 0;
for (int i = 0; i < argc; i++)
{
totalsize += strlen(argv[i]);
}
// Provides space for ' ' after each argument and a '\0' terminator.
char *ret = malloc(totalsize + argc + 1);
if (NULL == ret)
{
// Memory allocation error.
}
for (int i = 0; i < argc; i++)
{
strcat(ret, argv[i]);
strcat(ret, " ");
}
return ret;
}
这将简单地组合所有这些,在args之间放置空格
更新:我修改了原文以消除缓冲区溢出问题。