2014-04-04 77 views
1

在這種方法中,如何將ifstream或字符串輸入轉換爲char?

void mainRoutine(char *pattern, string searchPattern) 
{ 
     cout << "Please enter the string pattern to be searched: " << endl; 
     getline(cin, searchPattern); 
     ifstream filename(searchPattern.c_str()); 
     while(filename.good() && filename.peek() != EOF) 
     { 
       cout << (char)filename.get(); 
     } 
     cout << "\n"; 
     char *pattern = (char *)filename; 
} 

當用戶輸入一個字符串 - 文件名應採取的,我想這個字符串轉換成字符,所以我可以在其他的方法來使用它。我怎樣才能做到這一點?

+0

而不是「轉換這個字符串變成一個字符」,你或許意味着它轉換成字符指針? –

+2

從'std :: string'製作'char *'很簡單 - 在字符串上調用'c_str()'方法。 – dasblinkenlight

+0

你的代碼甚至不應該在可尊重的編譯器上編譯。最後一行:char * pattern =(char *)filename;無效。然而,你可以用一個本地只讀字符指針來獲取字符串:const char * pName = filename.c_str();請注意,指針只在當前函數的範圍內有效。 – glampert

回答

0
char* chFilNam = new char[fileName.length() + 1]; 
memcpy(chFilNam,fileName.c_str(),fileName.length()); 
+0

你應該使用strcpy()來代替。 memcpy()不會複製null終止符,因此chFilNam將處於無效狀態以用作C字符串。 – glampert

1

只返回std::string

std::string mainRoutine() 
{ 
    std::string searchPattern; 
    std::cout << "Please enter the string pattern to be searched: \n"; 
    std::cin >> searchPattern; 

    std::cout << std::ifstream(searchPattern).rdbuf() << '\n'; 
    // searchPattern.c_str() if not using c++11 

    return searchPattern 
}