【问题标题】:Print using command line arguments使用命令行参数打印
【发布时间】:2021-03-12 05:15:00
【问题描述】:

我试图让程序在命令行中使用环境变量打印特定的输出,但程序似乎卡在我的第一个输入上。

这是我的代码

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



void print_data(char*select);

int main (int argc, char * argv[]){

int ret;
char *ch = NULL;


   if( argc == 2)
   {
      ch = argv[1];
   }
   else
   {
      ch = getenv("V1");
   }

   void print_data(ch);

   return 0;
}
void print_data(char* select){

      if(select, "k")
      {
          printf("Value set to key\n");
      }
      else if(select, "l")
      {
         printf("Value set to last name\n");
      }
      else if (select, " ")
      {
         printf("Value set to %s\n", select);
      }
   }

我的问题是程序要么只打印“值设置为键”或“值设置为姓氏”。 如何使用 Print_data 中的指针来检查命令行中输入了什么命令?

输出:

【问题讨论】:

  • 你想用if(select, "k")做什么?
  • 尝试使用指针检查我在 main(命令行)中输入的参数是否为 k?

标签: c linux environment-variables


【解决方案1】:

if(select, "k") 几乎可以肯定没有做你想做的事,但并不完全清楚你想要什么。该表达式等效于if(1),这就是您获得所见行为的原因。也许你打算:

if( select[0] == 'k' ) ...
else if( select[0] == 'l' ) ...
else if( select[0] == ' ' ) ...

这样写更好:

switch( select[0] ) {
case 'k': ...;
...

【讨论】:

  • void print_data(ch);里面main也有问题
  • 谢谢,有帮助。但是当我没有任何输入时,“选择”会成为默认的环境变量吗?
  • main有什么问题?
  • @B0ris 如果 argc != 2,则 select 将是 getenv 的结果,可能为 NULL,在这种情况下,select[0] 将(几乎肯定)导致分段错误。
  • @B0ris void print_data(ch); 应该是 print_data(ch);(void)print_data(ch);(没有必要,因为 print_data 已经返回 void,但合法)
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2020-05-05
  • 2016-05-01
  • 2023-04-03
  • 2016-03-20
  • 2020-01-06
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多