2014-02-08 58 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")完全是多余的,毫无意义的,应予删除。它实际上可能会让你感到困惑。