2013-11-25 77 views
1

我有功能類似下面:新手 - 的char *轉換爲字符串

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

} 

我想找到一個argv[1]字符(點字符)。我試圖char*轉換爲字符串象下面這樣:

std::string para2=""; 
if(argc==2 && argv[1]!=NULL) 
{ 
    para2 = string(argv[1]); 
} 

para2顯示與打印命令奇怪的字符和發現功能不能正常工作。請指導我如何找到char*類型的字符。

謝謝

+3

顯示您的*打印*和*查找*代碼。 – user694733

+0

if(para2.find(「。jpg「)> 0 //它總是返回true –

+3

這不是C,我刪除了不正確的標記請不要標記爲C和C++,除非你確實是這個意思 – unwind

回答

0

您可能正在構建您的EXE作爲UNICODE。

嘗試設置「字符集」到「使用多字節字符集」,在屬性 - >常規

0

你可能使用了錯誤的printf。您可以使用std :: cout輸出para2,但不能使用printf作爲字符串類型。如printf只能打印出原始類型如int,雙,浮法,ULONG,字符,字符*等

#include <iostream> 
#include <string> 

int main(int argc, char* argv[]) 
{ 
    std::string para2=""; 
    if(argc==2 && argv[1]!=NULL) 
    { 
     para2 = std::string(argv[1]); 
     std::cout<<para2<<std::endl; 
    } 
    return 0; 
} 

您可以參考"printf" on strings prints gibberish"printf" on strings prints gibberish

如果您想在char *中查找指定的字符串,可以使用strstr()函數來執行此類操作。和字符串::發現也可以做找工作,你可以參考http://www.cplusplus.com/reference/string/string/find/

對於字符串::找到函數,返回值是爲size_t類型。返回值返回第一個匹配的第一個字符的位置。如果找不到匹配項,則函數返回string :: npos。

你應該總是使用string ::非營利組織的檢查條件,但不是以0

+0

但是爲什麼 \t if(para2.find(「。jpg」) > 0 //它總是返回true –

+0

使用find的正確方法是'if(para2.find(「。jpg」)!= std :: string :: npos)' – user2176127

+0

是的,返回值是size_t類型,它是一個無符號整數 如果沒有找到匹配,函數返回string :: npos,它並不意味着string :: npos爲0,你應該使用string :: npos來檢查。 – thinkinnight

1

的一些注意事項如下:

注1:

std::string para2=""; 

當你構建一個字符串,默認構造函數初始化一個空字符串,所以你不需要=""部分:std::string para2;就好了。

注2:

if(argc==2 && argv[1]!=NULL) 
{ 
    para2 = string(argv[1]); 
} 

當您從char*分配給std::string,你可以使用operator=超載,沒有明確的string部分:

para2 = argv[1]; 

基礎上一些要求在你的問題的一些評論,你可以使用std::string::rfind來檢查一些擴展名,例如:

#include <iostream> 
#include <string> 

int main(int argc, char * argv[]) 
{ 
    std::string param2; 

    if (argc == 2) 
    { 
     param2 = argv[1]; 
    } 

    std::cout << param2 << std::endl; 

    if (param2.rfind(".jpg") != std::string::npos) 
    { 
     std::cout << "JPEG file." << std::endl; 
    } 
}