我想在命令行中使用环境变量使程序打印特定的输出,但是该程序似乎卡在了我的第一个输入上。
这是我的代码
#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")
几乎可以肯定,它并没有做你想要的事情,但是还不清楚你想要的是什么。该表达式等效于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
谢谢,这有所帮助。但是,当我没有任何输入时,“ select”将成为默认的环境变量吗?
主要是什么问题?
@ B0ris如果argc!= 2,则select将是的结果
getenv
,可能为NULL,在这种情况下select[0]
(几乎可以肯定)将导致分段错误。@ B0ris
void print_data(ch);
应该是print_data(ch);
或(void)print_data(ch);
(由于print_data
已经返回void
,所以不是必需的,但是合法)