2013-06-28 86 views
1

我是cpp的初學者,並對以下代碼有問題。通常它應該根據argv [1]顯示文本,但它不顯示任何內容。爲什麼不argv工作?

我在做什麼錯?

#include <stdio.h> 

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

    if(argv[1] == "a" && argc > 1) printf("hello world, argc: %d\n", argc); 
    else if(argv[1] == "2" && argc > 1) printf("hello everyone, argc: %d\n", argc); 

    for(int i=0; i<argc; i++) printf("%s\n", argv[i]); 

    return 0; 
} 
+6

您需要使用'strcmp'而不是== == –

+0

@Andreas非常快速的一個:) – ha9u63ar

+4

因爲它被標記爲C++,所以'(std :: string(argv [1])==「a」)'可能更合適。 – Roddy

回答

5

使用strcmp,下面的代碼應該工作:

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

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

    if(argc > 1 && strcmp(argv[1], "a") == 0) { 
     printf("hello world, argc: %d\n", argc); 
    } else if(argc > 1 && strcmp(argv[1], "2") == 0) { 
     printf("hello everyone, argc: %d\n", argc); 
    } 

    for(int i=0; i<argc; i++) printf("%s\n", argv[i]); 

    return 0; 
} 

由於這個問題被標記C++,使用像以下更類似於C++-like:

#include <iostream> 
#include <string> 

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

    if(argc > 1) { 
     std::string argv1(argv[1]); 

     if (argv1 == "a") { 
      std::cout << "hello world, argc: " << argc << std::endl; 
     } else if (argv1 == "2") { 
      std::cout << "hello everyone, argc: " << argc << std::endl; 
     } 
    } 

    for(int i=0; i<argc; i++) { 
     std::cout << argv[i] << std::endl; 
    } 

    return 0; 
} 
+0

非常感謝:)。 – www

+0

不是更清楚:) – www

+0

Ops。現在即使我發送參數「a」作爲輸入,它也不會顯示結果:'./helloWorld「a」'或'./helloWorld a'不會進入任何分支。 – www

3

2與你的代碼最重要的問題:

  • 你要檢查參數號碼前檢查參數。
  • 如果您知道最大長度,則使用標準庫函數(如strcmp() 或甚至更好strncmp())比較字符串。

這是C代碼的工作。希望這個幫助。

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

int main (int argc, char* argv[]) 
{ 
    if ((argc > 1) && ((strcmp(argv[1], "a") == 0))) 
    { 
     printf("hello world, argc: %d\n", argc); 
    } 
    else if ((argc > 1) && (strcmp(argv[1], "2") == 0)) 
    { 
     printf("hello everyone, argc: %d\n", argc); 
    } 

    for (int i = 0; i < argc; i++) 
     printf("%s\n", argv[i]); 

    return 0; 
} 

一些細節比較字符串。如果你在這裏使用==運算符(如果你沒有超載它),你只需比較對象地址(仔細看看,你在這兩種情況下都有char *)。顯然你的字符串文字和參數緩衝區有不同的地址。你需要比較內容。其實在C++中,你可以構造std::string並使用比較運算符。

使作品基於==運營商另一個更多的C++解決方案

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

int main (int argc, char* argv[]) 
{ 
    if ((argc > 1) && (std::string(argv[1]) == "a")) 
    { 
     printf("hello world, argc: %d\n", argc); 
    } 
    else if ((argc > 1) && (std::string(argv[1]) == "2")) 
    { 
     printf("hello everyone, argc: %d\n", argc); 
    } 

    for (int i = 0; i < argc; i++) 
     printf("%s\n", argv[i]); 

    return 0; 
} 
+0

+1 - 抓了我18秒:) –

+1

@Andreas你還有機會。它被標記爲C++而不是C ^^。 – a3f

+2

@ a3f完成 - 參見上面:D –