如何从 C++ 中的函数返回字符串值
Posted
技术标签:
【中文标题】如何从 C++ 中的函数返回字符串值【英文标题】:How can I return a string value from a function in C++ 【发布时间】:2014-02-08 14:35:47 【问题描述】:#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
行实际上会显示该值。但我无法返回字符串中的值。
老实说,我不知道为什么这不起作用。我最初只是想使用“char”,但由于某种原因这不起作用。
Visual Studio 不喜欢:
char test;
test = "help";
它在“=”下划线。
现在,我只想从函数返回一个字符串值。我还需要它做更多事情,但这是目前的主要问题。
【问题讨论】:
1.如果你需要一个 c 风格的字符串 2,你需要const char* test = "help
。如果你想返回一个字符串,我想你可以做 return std::string("help")
。
没有返回字符串是什么意思?以及为什么在返回之前有system("pause")
?
请在控制台/终端中测试/启动您的程序并摆脱system("pause");
【参考方案1】:
取消注释 cout 行实际上会显示字符串。但不返回字符串。
您的程序both prints and returns the string,在main
中再次打印。我在您的程序中看到的唯一问题是:
-
您无缘无故地使用
system("pause")
。
您不同意使用std::
前缀或导入命名空间。在这方面,我强烈建议使用std::
前缀。
您没有使用函数参数。
我最初只是想使用“char”,但由于某种原因这不起作用。
嗯,char
,顾名思义,只能存储1个字符。在:
char test = "help";
您试图将 5 个字符 (4 + \0
) 分配给大小只能存储 1 的对象。这就是您的编译器抱怨的原因。
【讨论】:
1.哇,我什至没有注意到...谢谢,它现在工作正常。 2. 你到底是什么意思?我对此有点困惑。我想使用“使用命名空间”,但我在其他地方读到,即使它在那里,你也必须在字符串上执行 std::。 3. 这听起来像是一个非常大的错误......但它完美无缺。这是为什么呢?【参考方案2】:我认为您需要将一个 int 传递给您的函数并以字符串形式将其取回。要进行这种转换,您需要这样的东西:
std::ostringstream stm;
stm << yourIntValue;
std::string s(stm.str());
或者这个:
char bf[100];
sprintf(bf, "%d", yourIntValue);
std::string s(bf);
如果你把这个 sn-p 放在一个函数中,那么你也可以接受一个 int 参数,将它转换为一个 std::string 并返回 std::string,就像其他人展示的那样。
【讨论】:
【参考方案3】:您需要做的是将函数的返回类型声明为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)。
【讨论】:
【参考方案4】:您的代码works perfectly fine,尽管system("pause")
是完全多余且毫无意义的,应该删除。事实上,这可能会让您感到困惑。
【讨论】:
以上是关于如何从 C++ 中的函数返回字符串值的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NodeJS 中的 Rust FFI 函数返回字符串值?