C++字符串/字符*串联
C++ string/char* concatenation
我写了一个小函数来接受一个"字符串"并记录它。
void
IPC::bomb (char * msg) { /* etc */ }
这个调用它的实例没有编译:
bomb( __FUNCTION__": socket() call failed: " + strerror(errno));
诊断:
./c/IPC.cpp:26: error: expected ')' before string constant
./c/IPC.cpp:26: error: invalid conversion from 'const char*' to 'char*'
我很困惑如何有效地使用引用的文字,std::string,char*,以及constness是如何融入其中的。我该如何解决上述问题?一般来说,字符串串接是否有一些经验法则,尤其是在混合char*和字符串时?
UPDATE 1:可能还有另一个问题在起作用:C预处理器显示了这个扩展:
bomb( std::string(__FUNCTION__ ": socket() call failed: ") + strerror((*__errno_location ())));
您的函数签名是为接受char*
而设计的。但是,值"string1" + ...
是一个const char*
,因为它是一个临时对象。将您的函数签名更改为IPC::bomb(const char* msg)
,它应该是可以的。
顺便说一句,不能只使用运算符+连接两个C风格的字符串,因为它只执行指针运算。请尝试使用std::string
,将所有字符串强制转换为此类型。
因此,这个例子可能看起来像
void IPC::bomb (const std::string& msg) { /* etc */ }
bomb(std::string(__FUNCTION__": socket() call failed: ") +
std::string(strerror(errno)));
如果使用字符串。
Edit:我不能简单地通过将__FUNCTION__
"somestring"放在一起来连接它们。我用的是mingw编译器。
因此,为了安全起见,将所有三个部分连接在一起,如下所示:
bomb( string(__FUNCTION__) + ": socket() call failed: " + string(strerror(errno)) );
将void IPC::bomb (char * msg)
更改为void IPC::bomb (const char * msg)
以消除第二个错误,这样它就可以接受要保护的常量字符串,使其免受任何修改。
如果将IPC::bomb
更改为IPC::bomb(const std::string& msg)
,则可以执行:
bomb(std::string(__FUNCTION__) + ": socket() call failed: " + strerror(errno));
并且没有任何错误。
这里有一个完整的程序来做一些类似的事情:
#include <string>
#include <iostream>
#include <cstring>
void func(std::string str)
{
std::cout << str << std::endl;
}
int main() {
func(std::string(__FUNCTION__) + ":Some string " + strerror(2));
return 0;
}
不能将c字符串(char*
字符串)与+
运算符连接(除非要编写重载运算符)。您必须创建一个足够长的新字符串来包含要组合的两个字符串,然后用memcpy
、strncpy
或类似的东西手动复制它们。
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 字符和字符串的字符串串联
- 字符* 串联无法正常工作
- 字符串的串联正在替换前几个字符
- 文字符号和字符串变量之间的串联然后返回常量字符*
- 获取路径删除和串联字符
- 字符串串联过程中添加的额外字符
- C++ 中的多个串联字符
- 无符号字符串联
- C++字符串/字符*串联
- C++字符串联与 std::string 行为.请解释一下