将 std::String 转换为 char * [重复]
Posted
技术标签:
【中文标题】将 std::String 转换为 char * [重复]【英文标题】:Coverting std::String to char * [duplicate] 【发布时间】:2013-09-10 21:39:56 【问题描述】:我需要将字符串传递给仅接受 char * 的套接字 send() 函数。所以在这里我试图转换它:
void myFunc(std::string str) //Taking string here const is good idea? I saw it on some examples on web
char *buf = str.c_str; //taking buf const is good idea?
std::cout << str;
int main()
const std::string str = "hello world";
myFunc(str);
return 0;
给出错误:
test.cpp:6:18: error: cannot convert ‘std::basic_string<_CharT, _Traits, _Alloc>::c_str<char, std::char_traits<char>, std::allocator<char> >’ from type ‘const char* (std::basic_string<char>::)()const’ to type ‘char*’
【问题讨论】:
c_str() ..... 【参考方案1】:首先,c_str()
是一个函数,所以你需要调用它。
其次,它返回 const char*
而不是 char*
。
总而言之:
const char* buf = str.c_str();
【讨论】:
syam:为什么需要const
?没有它也可以!
@Catty 曾经有一段时间,char* buf = str.c_str()
被接受为通常的 const 正确性规则的例外,但现在这不再是有效的 C++。如果您的编译器接受它,则仅表示它不遵守最新标准。不过,这不应该阻止您尝试编写正确的代码。【参考方案2】:
首先,调用 c_str() 有一个函数。 之后,c_str() 返回一个 const char*,如果您想使用 std::strcpy() 获得一个 char*,则需要复制它:http://en.cppreference.com/w/cpp/string/byte/strcpy
【讨论】:
【参考方案3】:试试:
void myFunc(std::string str)
const char *buf = str.c_str();
std::cout << str;
【讨论】:
这是正确的方法吗?我不知道,我只是想知道它是否会在以后产生任何问题 如果你的 send() 例程接受一个 const char* (如果我们谈论的是套接字,它可能会接受),这是正确的方法。另一方面,如果您要发送二进制数据,我建议您使用 std::vector以上是关于将 std::String 转换为 char * [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 std::string 转换为 const char*? [复制]
将 std::basic_string<Char> 转换为字符串
将函数参数 `const char*` 转换为 `std::string_view` 是不是安全?