2014-02-08 85 views
-2
#include <iostream> 
#include <string> 
using namespace std; 

std::string dispCard(int card) 
{ 
    string textCard = "help"; 
    //cout << textCard; 

    system("pause"); 
    return textCard; 
} 

int main() 
{ 
    // Using this area to test functions for now 
    cout << dispCard(14); 

    return 0; 
} 

取消註釋cout行實際上會顯示該值。但是我不能返回字符串中的值。如何從C++中的函數返回字符串值

老實說,我不知道爲什麼這不起作用。我最初只是想使用「字符」,但由於某種原因不起作用。

的Visual Studio不喜歡:

char test; 
test = "help"; 

它強調了 「=」。

現在,我只想從函數返回一個字符串值。我還需要做更多,但這是目前的主要問題。

+0

1.如果你需要一個c風格的字符串,你需要const char * test =「help」。 2.如果你想要,你可以只返回std :: string(「help」)爲什麼你有一個'系統(「暫停」)'返回前返回一個字符串。 – dkrikun

+2

你是什麼意思它沒有返回字符串?和?內的控制檯/終端 – juanchopanza

+0

普萊斯測試/發佈您的計劃,擺脫那'系統(「暫停」);?' –

回答

1

取消註釋cout行實際上會顯示字符串。但不返回字符串。

您的程序both prints and returns the string,在main中再次打印。我可以看到您的程序唯一的問題是:

  1. 您正在使用system("pause")無故。
  2. 您不符合使用std::前綴或導入命名空間。在這方面我強烈建議std::前綴。
  3. 您沒有使用函數參數。

我最初只是想使用「字符」,但這並不出於某種原因。

那麼,顧名思義,char只能存儲1個字符。在:

char test = "help"; 

你想5個字符(4 + \0)分配給對象誰的大小隻能存儲1這就是爲什麼你的編譯器抱怨的原因。

+0

1.哇,我甚至沒有注意到......謝謝你,它現在工作正常2.究竟你的意思嗎,我上有點困惑。我想用「使用命名空間」,但我看別的地方,即使它的存在,你必須做的std ::對字符串。3.這聽起來像是一個非常大的錯誤...但它完美的作品。爲什麼是這樣? – TechnoSam

1

我認爲你需要傳遞一個int給你的函數,並以字符串形式返回。要做到這一點的轉換,你需要這樣的事:

std::ostringstream stm; 
stm << yourIntValue; 
std::string s(stm.str()); 

或本:

char bf[100]; 
sprintf(bf, "%d", yourIntValue); 
std::string s(bf); 

如果你把這個片段的功能,那麼你還可以接受一個int參數,將其轉換爲一個std: :字符串並返回std :: string,如其他人所示。

0

你需要做的是將函數的返回類型聲明爲std::string,然後返回一個字符串對象,可以隱式轉換爲字符串對象的東西或者顯式構造字符串對象的東西。

實施例:

std::string foo(){ 
    return "idkfa"; //return C-style string -> implicitly convertible to string 
    return {"idkfa"}; // direct initialization of returning std::string 
    return std::string("idkfa"); //return explicitly constructed std::string object 
} 

還要注意的是C風格字符串是char*類型的(C風格的字符串基本上都是chars的數組,其中最後一個元素是\0,即0)。

0

您的代碼works perfectly fine,雖然該system("pause")完全是多餘的,毫無意義的,應予刪除。它實際上可能會讓你感到困惑。