c++ - std::string 声明的函数不会提示返回 char *

标签 c++ string

这不是我的程序所以不要开始责备我:-)。我得到的一些随机程序。 MyFunc() 正在返回全局声明的缓冲区。我使用 VS2008,它没有提示

static char buffer[1024];

std::string MyFunc() {
    ....
    ....
    return buffer;
}

但是当我添加这行代码时

char * ret;
ret = MyFunc() 

它提示:“错误:不存在从“std::string”到“char *”的合适的转换函数”

我的问题是为什么编译器现在会报错?为什么语法检查会出现这种不稳定的情况?同样,我没有更改 MyFunc() 的自由。在我的程序中,如果我能做到

std::string ret;
ret = MyFunc(); 

并摆脱语法错误,但真的很想了解这种奇怪的行为。

最佳答案

string() 有一个接受 char* 的构造函数,因此您可以进行自动转换。没有从字符串到 char* 的自动转换。您必须调用 string::c_str() 才能获取 char*。

编辑 尽管您只要求对行为进行解释,但该论坛中的其他人似乎认为我没有提及 string::c_str 返回一个 const char*,而不是一个简单的 char*,从而欺骗了您。但解释仍然存在:不存在从字符串到 char* 或 const char* 的隐式/自动转换。请随意阅读有关 c_str here 的信息如果这对您很重要。

关于c++ - std::string 声明的函数不会提示返回 char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24045897/

相关文章:

将0连接到C中的字符串

regex - 如何在 VBA 宏中使用正则表达式解析 Excel 单元格字符串

c++ - MiniDumpWriteDump() 挂起

c++ -/usr/bin/ld : cannot find -l-L/usr/lib

c++ - boost 目录迭代器

python - Python 中的字符串搜索和比较

java - 如何将某个字符放在某个字符串之前?

c++ - 2个 vector 的和值

c++ - glewInit() 时 OpenGL 错误 GL_INVALID_ENUM (0x0500)

c++ - swscanf_s 在读入 wchar_t 数组时导致错误