C++ 如何连接字符*和常量字符*?

C++ 如何连接字符*和常量字符*?,c++,c,C++,C,我需要把“你好世界”放在str3里。我该怎么做 const char *one = "Hello "; char *two = "World"; char *str3; 您必须先分配str3,然后才能使用它写入字符串 char *str3 = malloc(strlen(one) + strlen(two) + 1); sprintf(str3, "%s%s", one, two); // ^ \0 termination 添加@建议: 应该知道。在我的代码中,

我需要把“你好世界”放在str3里。我该怎么做

const char *one = "Hello ";
char *two = "World";
char *str3;
您必须先分配str3,然后才能使用它写入字符串

char *str3 = malloc(strlen(one) + strlen(two) + 1);
sprintf(str3, "%s%s", one, two);      //        ^  \0  termination 
添加@建议:

应该知道。在我的代码中,我使用
malloc()
进行分配,所以在代码中,当我不需要
str3
时,我们应该使用C显式地释放内存

另外,为了避免缓冲区溢出,请始终使用而不是
sprintf
:因此请按如下方式重新编写代码:

int length = strlen(one) + strlen(two) + 1;
char *str3 = malloc(length * sizeof(char));
snprintf(str3, length, "%s%s", one, two);      
 // write more code that uses str3
free(str3);
 // now don't uses `str3`'s allocated memory  
读一本关于C的书

str3 = malloc(strlen(one) + strlen(two) + 1) ; // +1 for the 0 terminator
strcpy(str3, one) ;
strcat(str3, two) ;
...
free(str3) ;   // frees allocated space when you are finished.
std::vector v;
v、 插入(v.end(),一个,一个+strlen(一个));
v、 插入(v.end(),two,two+strlen(two));
v、 推回('\0');
str3=v.data();

字符串文本,如
“Hello”
存储在只读内存中,因此您需要将它们复制到可以修改的地方


因此,您必须首先分配存储字符串的内存。一个简单的字符数组就可以了。然后使用strcpy()和strcat()将字符串文本复制到该数组中。

str3只是一个指针,您必须为str3分配空间。或者获取一本好书或教程。当你尝试这一点时,如果你有问题,请到这里来。现在,这类问题我忽略了“必须表现出最低限度的理解”的结束原因。这个问题似乎离题了,因为它提出了一些对语言至关重要的问题,可以在一个好的教程中阅读。
char*str3=strcat(strcpy(malloc)(strlen(one)+斯特伦(2+1),1),2)+1,还有我送的象征性礼物:↑“你好”已经有空间了。您需要执行“%s%s”并删除其中一个+1s@Espen是的,你是对的,我应该纠正谢谢!我不确定我对sprintf的感觉如何,但是嘿,它很管用。。。一个挑剔的地方:如果你要告诉某人打电话给
malloc
,那么请务必提醒他们也需要打
free
。问题是人们不会阅读链接。他们只会复制你的代码,并且只进行必要的最少更改,以使其在程序中编译。虽然我们不能阻止人们开枪打自己的脚,但我们至少可以在上面挂一个大的“不要在这里开枪”的牌子。
std::vector<char> v;
v.insert(v.end(), one, one + strlen(one));
v.insert(v.end(), two, two + strlen(two));
v.push_back('\0');
str3 = v.data();