C 通过argv传递的参数会影响程序的输出
这是家庭作业 因此,对于我的项目,我必须将两个字符串组合在一个数组中,在组合时,两个字符串都有一个模式。(这很模糊,所以我在下面举一个例子。我的问题是我的主函数中的argv参数。argv在运行程序时读取用户的输入。因此它类似于./program_name-r。程序这部分的-r将使下面所示的示例在用户输入后运行。但是我遇到的问题是,如果我有任何其他字母,比如-d,那么程序仍然可以运行。这不是问题,但我程序的另一部分要求我有不同的运行代码,以便程序可以执行不同的操作。我假设我的问题在我的if语句中,但我不知道为什么它不起作用。任何帮助都将非常感谢艾德C 通过argv传递的参数会影响程序的输出,c,string,argv,C,String,Argv,这是家庭作业 因此,对于我的项目,我必须将两个字符串组合在一个数组中,在组合时,两个字符串都有一个模式。(这很模糊,所以我在下面举一个例子。我的问题是我的主函数中的argv参数。argv在运行程序时读取用户的输入。因此它类似于./program_name-r。程序这部分的-r将使下面所示的示例在用户输入后运行。但是我遇到的问题是,如果我有任何其他字母,比如-d,那么程序仍然可以运行。这不是问题,但我程序的另一部分要求我有不同的运行代码,以便程序可以执行不同的操作。我假设我的问题在我的if语句中,
输入:字符串1:abc 字符串2:123 输出:a1b2c3
这是我的程序,它符合并给出正确的输出
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void merge(char *s1, char *s2, char *output)
{
while (*s1 != '\0' && *s2 != '\0')
{
*output++ = *s1++;
*output++ = *s2++;
}
while (*s1 != '\0')
*output++ = *s1++;
while (*s2 != '\0')
*output++ = *s2++;
*output='\0';
}
int main(int argc , char *argv[])
{
int i;
if(argv[i] = "-r") {
char string1[30];
char string2[30];
printf("Please enter a string of maximum 30 characters: ");
scanf("%s" ,string1);
printf("Please enter a string of maximum 30 characters: ");
scanf("%s" ,string2);
char *output=malloc(strlen(string1)+strlen(string2)+1);
//allocate memory for both strings+1 for null
merge(string1,string2,output);
printf("%s\n",output); }
return 0; }
#包括
#包括
#包括
无效合并(char*s1、char*s2、char*output)
{
而(*s1!='\0'&&&*s2!='\0')
{
*输出+++=*s1++;
*输出+++=*s2++;
}
而(*s1!='\0')
*输出+++=*s1++;
而(*s2!='\0')
*输出+++=*s2++;
*输出='\0';
}
int main(int argc,char*argv[])
{
int i;
如果(argv[i]=“-r”){
charstring1[30];
charstring2[30];
printf(“请输入最多30个字符的字符串:”;
scanf(“%s”,string1);
printf(“请输入最多30个字符的字符串:”;
scanf(“%s”,string2);
char*output=malloc(strlen(string1)+strlen(string2)+1);
//为两个字符串分配内存+1表示null
合并(字符串1、字符串2、输出);
printf(“%s\n”,输出);}
返回0;}
正如Ora已经指出的那样,您还没有初始化变量i。C8263A20已经回答了您的错误,但是比较字符串并不是这样做的 注意:解析命令行选项是一项相当复杂的任务,如果可能,您应该使用现成的解决方案,例如:
getopt(3)
(在Posix中)
对于您当前的问题,一个简短(过度)简化的解决方案是:
#include <stdio.h>
int main(int argc, char *argv[])
{
// check: do we have one option given at all?
if (argc == 2) {
// first character is a hyphen, so skip it
// A good idea would be to check if the assumption above is correct
switch (argv[1][1]) {
// we can only "switch" integers, so use single quotes
case 'r':
puts("Option \"r\" given");
break;
case 'd':
puts("Option \"d\" given");
break;
default:
printf("Unknown option %c given\n", argv[1][1]);
break;
}
} else {
puts("No options given at all");
}
return 0;
}
#包括
int main(int argc,char*argv[])
{
//检查:我们是否有一个选项?
如果(argc==2){
//第一个字符是连字符,请跳过它
//一个好办法是检查上述假设是否正确
开关(argv[1][1]){
//我们只能“切换”整数,所以使用单引号
案例“r”:
看跌期权(“期权\”r \“给定”);
打破
案例“d”:
看跌期权(“期权”d“给定”);
打破
违约:
printf(“给定未知选项%c\n”,argv[1][1]);
打破
}
}否则{
看跌期权(“完全没有期权”);
}
返回0;
}
如果这样做(使用
开关),您可以轻松添加更多单字母选项,而不会使代码混乱。将其放入循环中,您可以一次为程序提供更多选项。我尝试过,但当我有==时,它只会退出程序,因为我没有初始化,所以argv[I]指向完全随机的地方。你想检查argv[1]很抱歉,我也将I初始化为整数值,忘了在我的注释中包含该值。我正在考虑为该程序使用switch语句,但我不确定该如何操作。这帮了大忙。谢谢!