gpt4 book ai didi

比较c中的命令行参数

转载 作者:行者123 更新时间:2023-11-30 14:57:49 25 4
gpt4 key购买 nike

好吧,我需要编写一个 C 程序来处理和比较命令行参数。例如,假设该程序名为 test.c。我这样执行: ./test load something store 一两个 load store ...等等。我的意思是,当有一个“load”命令时,它会解析 argc+1 并用它做一些事情,当有一个“store”命令时,它会解析 argc+1 并用它做一些事情。将会做其他事情并解析 argc+1 和 argc+2。到目前为止,这是我的方法:

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

typedef struct Tooks {
char s1[50];
char s2[50];
char s3[50];
} Test; /*use this struct to compare the command line arguments in
which in am interested at every time. */

int main (int argc, char *argv){
int num = argc;
int y,i;
char args[num][50]; /*use this num-places array with each string
containing 50 chars. I did that because if i try directly to
strcpy( test.s1, argv[i]) i would get a seg fault. */
Test test;
strcpy( test.s1, "null");
strcpy( test.s2, "null");
strcpy( test.s3, "null");
for (y=0; y<num; y++){
strcpy(args[y], "null");
}//"initializing" the array as null

for (i=1; i<num;){
//copy the 3 command line arguments.
strcpy( test.s1, args[i]);
strcpy( test.s2, args[i+1]);
strcpy( test.s3, args[i+2]);
printf("s1 %s, s2 %s, s3 %s, num %d\n", test.s1, test.s2, test.s3, num);//Just a test print

if (strcmp(test.s1, "store")==0 && strcmp(test.s2, "null") != 0 && strcmp(test.s3, "null") != 0){
printf("%s\n, %s\n", test.s2, test.s3);
i=i+3;
}
else if (strcmp(test.s1, "load")==0 && strcmp(test.s2, "null") != 0){
printf("%s\n", test.s2);
i=i+2;
}
else {
printf("nothing\n");
printf("s1 %s, s2 %s, s3 %s\n", test.s1, test.s2, test.s3);
i++;
}
}

printf("end %d\n", argc);
return 0;
}

这是输出:

s1 null, s2 null, s3 null, num 6
nothing
s1 null, s2 null, s3 null
s1 null, s2 null, s3 null, num 6
nothing
s1 null, s2 null, s3 null
s1 null, s2 null, s3 null, num 6
nothing
s1 null, s2 null, s3 null
s1 null, s2 null, s3 �, num 6
nothing
s1 null, s2 null, s3 �
s1 null, s2 �, s3 , num 6
nothing
s1 null, s2 �, s3
end 6

用于命令 ./测试加载一些东西存储一二

命令行参数似乎既没有传递给结构体,也没有传递给数组。有任何想法吗? :)

最佳答案

您的代码有几个问题。

  1. 你永远不会用“null”以外的任何东西填充args。您继续将“null”字符串复制到您的结构中,这就是它打印的内容。

  2. 您永远不会引用 argv,它是一个数组,它将可执行文件名称存储在索引 0 中,并用您在命令行中提供的任何内容填充其余部分。

  3. Argv 应该是

    char* argv[] 

    而不是

    char* argv

关于比较c中的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43668880/

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