gpt4 book ai didi

C 中字符串的命令行参数

转载 作者:行者123 更新时间:2023-11-30 15:46:36 25 4
gpt4 key购买 nike

C 中有没有一种方法可以将整个命令行选项和参数存储在单个字符串中。我的意思是,如果我的命令行是 ./a.out -n 67 89 78 -i 9 那么字符串 str 应该能够打印整个命令行。现在,我能做的就是以不同的 vector 形式打印值。

#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 仅打印我的第一个参数,并且我希望打印所有参数,因此我想在将其存储在字符串中后对其进行解析。

最佳答案

您可以做的是循环 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);

关于C 中字符串的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18255383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com