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* 以及常量特性如何融入其中感到非常困惑。我该如何解决上述问题?一般来说,是否有一些关于字符串连接的经验法则,尤其是。混合 char* 和字符串时?

更新 1:可能存在另一个问题:C 预处理器显示此扩展:

bomb( std::string(__FUNCTION__ ": socket() call failed: ") + strerror((*__errno_location ())));

最佳答案

您的函数签名旨在接受 char*。但是,值 "string1"+ ... 是一个 const char*,因为它是一个临时对象。将函数签名更改为 IPC::bomb(const char* msg),应该没问题。

顺便说一下,您不能只使用 operator+ 连接两个 C 风格的字符串,因为它只是执行指针运算。尝试改用 std::string,将您拥有的每个字符串都转换为这种类型。

所以,这个例子看起来像

void IPC::bomb (const std::string& msg) {  /* etc */ }

bomb(std::string(__FUNCTION__": socket() call failed: ") + 
     std::string(strerror(errno)));

如果你使用字符串。

关于C++ 字符串/字符* 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816787/

相关文章:

c++ - 如何返回空字符引用

c++ - 了解 char 数组内存分配

c++ - 帮我解决 "template parameters not used in partial specialization"

c# - 从列表<>中动态删除和添加另一个字母,保持字母顺序

c++ - 如何使用 Levenshtein 距离字符串度量

字符数组声明使程序崩溃

c++ - 指针中的二维数组

c++ - getline 跳过第一个输入字符 c++

python - 如何使用 f2py 将字符串数组传递给 Fortran 子例程

char - SAS 在没有被要求的情况下将字符变量转换为数字