如何从 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 函数返回字符串值?

C#编组来自C++ DLL的无符号字符返回值[重复]

如何将字符串从 Python3 传递给 cythonized C++ 函数

如何从javascript中的函数返回值[重复]

C++中的peek()函数及其用法

字符串作为c ++函数中的返回值