2012-10-15 164 views
0

任何人都可以指出我在这里的问题?这编译但它不会打印任何东西。我需要将命令行参数中的字符串与字符串“hello”进行比较。 谢谢!阅读命令行参数

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

    int main(int argc, char *argv[]) 
    { 
     if (argc == 0) 
     { 
     printf("No arguments passed!\n"); 
     } 

     char *str = argv[1]; 
     if(strcmp("hello", str)==0) 
     { 
     printf("Yes, I find it");  
     } 

     else 
     { 
     printf("nothing"); 
     } 

    return 0; 
    } 
+2

的输出是什么,当你运行该程序的不同的东西? – mfrankli

+0

有没有输出,这就是问题 –

+1

似乎工作正常,我可以发布你正在使用的确切命令行吗?它应该打印一些东西。但是,如果没有参数,则会出现分段错误。 –

回答

2

我的ESP建议您在交互式编辑器/调试器(如Microsoft Studio)中运行它。您可能尚未将环境配置为传递任何命令行参数,因此您希望看到nothing作为输出。

但是,您访问不存在的argv[1],创建seg-fault,并且程序会在有任何输出之前中止。

要解决此问题,请首先检查argc的值,并确保不访问无效内存。

此外,我建议在每个printf的末尾放置一个\n以帮助将任何缓冲输出清除到控制台。

int main(int argc, char *argv[]) 
    { 
     if (argc == 0) 
     { 
     printf("No arguments passed!\n"); 
     } 
     else if(strcmp("hello", argv[1])==0) 
     { 
     printf("Yes, I find it\n");  
     } 

     else 
     { 
     printf("nothing\n"); 
     } 

    return 0; 
    } 

当你运行这个,你应该看到:

$prompt: myprogram 
No arguments passed! 

$prompt: myprogram hello 
Yes, I find it 

$prompt: myprogram world 
nothing 
+0

技术上正确的答案 - 爱ESP部分。从网络背景,我最初认为封装安全有效载荷,我说像什么?花了一秒钟,并实现了感官知觉。特别为幽默+1 +1 – fayyazkl

+0

...除了:'我运行程序>测试你好或>测试你好,输出什么都不是' – mcalex

+0

好吧,我做了几个变化,你可以看到,仍然没有任何 –

0

问题是你正在使用运行它的命令。正如你说:

我运行程序>测试招呼,或者>测试HI和输出是什么

>是重定向输出,并最终给你任何命令行参数。你想要的只是program hello没有输出重定向。

+0

我认为'>'是cmd提示 – mcalex

+0

是的可能。无论如何,abelensky的答案是一个很好的答案 – mfrankli

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

    int main(int argc, char *argv[]) 
    { 
    if (argc < 2 || 0 != strcmp("hello", argv[1])) 
     printf("nothing\n");  
     else 
     printf("yes, found it\n"); 

    return 0; 
    } 

和输出

bash-3.2$ gcc 1.c -o 1 
    bash-3.2$ ./1 hello1 
    nothing 
    bash-3.2$ ./1 hello 
    yes, found it 
    bash-3.2$ ./1 
    nothing 
0

试着打电话给你,以“测试”