通过argv传递的参数会影响程序的输出

时间:2017-12-02 22:55:20

标签: c string argv

这适用于家庭作业

因此,对于我的项目,我必须组合两个字符串,其中两个字符串在组合时都有一个模式。 (这很模糊,所以生病了下面的一个例子。我的问题是我的主函数中的argv参数。当程序运行时,Argv读取用户的输入。所以它就像./program_name -r。程序的这一部分的-r会使得下面显示的例子会在用户输入之后运行。但是我遇到的问题是如果我有任何其他字母像-d那么程序仍然存在。这不是一个问题,但我的程序的另一部分要求我有一个不同的运行代码,所以程序会做一些不同的事情。我认为我的问题在我的if语句中,但我可以&#39 ;弄清楚为什么那不起作用。任何帮助都将不胜感激!

输入:字符串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; }

3 个答案:

答案 0 :(得分:2)

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;
}

如果您这样做(使用switch),您可以轻松添加更多单个字母选项,而不会使代码混乱。把它放在循环中,你可以一次为程序提供更多选项。

答案 1 :(得分:1)

  1. 我没有初始化
  2. argv [i] =“ - r”&lt; - 是一个赋值语句,你应该使用“==”

答案 2 :(得分:1)

您在主要功能中尝试做的是检查第一个命令行参数是否等于&#34; -r&#34;。

你实际做的是分配&#34; -r&#34;通过使用单个&#39; =&#39;到argv [i]。 在C中,通过&#39; ==&#39;进行比较。操作者。

但是,由于您要尝试与字符串(C中的字符数组)进行比较,因此您不得使用&#39; ==&#39;为此,您只需比较char-Arrays开始的地址。

而是使用C库函数strcmp来实现此目的:

https://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm

你还没有像Ora已经指出的那样初始化变量i。