将两个const char*组合在一起

111*_*111 2 c++ string const char

我已经尝试了很多方法来做到这一点,我得到了一个静态的空白,并且在我制作的Console类中,Void它自我工作正常:

Console::WriteLine(const char* msg)
Run Code Online (Sandbox Code Playgroud)

另一方面,我得到了另一个const char*non static void,它调用了来自它的Console :: WriteLine,我已经在C#上工作了大约一年,在C#上我可以很容易地做到这样的事情:

string a = "Start ";
string b = a + "End";
Run Code Online (Sandbox Code Playgroud)

当我在C++上调用它时,它给了我一堆错误:

Player::Kill(const char* Message)
{
    Console::WriteLine("> " + Message + " <");
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了strcat的东西并且放了,但是它告诉我使用strcat_s并不真正起作用,而且我也试过做字符串而不是const char*,并尝试了char*,但是所有这些都给了我想要做的事情的错误.

kfs*_*one 7

"const"表示"不能更改(*1)".因此,您不能简单地将一个const char字符串"添加"到另一个(*2).你可以做的是将它们复制到非const字符缓冲区.

const char* a = ...;
const char* b = ...;

char buffer[256]; // <- danger, only storage for 256 characters.
strncpy(buffer, a, sizeof(buffer));
strncat(buffer, b, sizeof(buffer));

// now buffer has the two strings joined together.
Run Code Online (Sandbox Code Playgroud)

您出于类似原因尝试使用std :: string失败.你说:

std::string a = "Start";
std::string b = a + " End";
Run Code Online (Sandbox Code Playgroud)

这转化为

b = (std::string)a + (const char*)" End";
Run Code Online (Sandbox Code Playgroud)

哪个应该没问题,除了它创建一个额外的字符串,你可能想要的是什么

std::string a = "Start";
a += " End";
Run Code Online (Sandbox Code Playgroud)

如果您在执行此操作时遇到编译错误,请发布它们(确保#include).

或者你可以这样做:

std::string addTwoStrings(const std::string& a, const std::string& b)
{
    return a + b; // works because they are both strings.
}
Run Code Online (Sandbox Code Playgroud)

以下所有工作:(见现场演示http://ideone.com/Ytohgs)

#include <iostream>
#include <string>

std::string addTwoStrings(const std::string& a, const std::string& b)
{
    return a + b; // works because they are both strings.
}

void foo(const char* a, const char* b)
{
    std::string str = a;
    std::cout << "1st str = [" << str << "]" << std::endl;
    str += " ";
    std::cout << "2nd str = [" << str << "]" << std::endl;
    str += b;
    std::cout << "3rd str = [" << str << "]" << std::endl;
    str = addTwoStrings(a, " ");
    std::cout << "4th str = [" << str << "]" << std::endl;
    str = addTwoStrings(str, b);
    std::cout << "5th str = [" << str << "]" << std::endl;
}

int main()
{
    foo("hello", "world");
}
Run Code Online (Sandbox Code Playgroud)

*1或更准确地说,"不能原位更改" - 您可以在表达式等中使用它,例如,例如,

const size_t len = strlen("hello");
size_t newLen = len + strlen("world");
// but this would not be legal:
len += 2; // error: len is const.
Run Code Online (Sandbox Code Playgroud)

2"const char a + const char*b"实际上是试图添加两个指针而不是两个字符串,结果将是字符串a的地址加上字符串b的地址,其总和将是一些随机内存位置