如何连接char *和const char *?

时间:2014-01-30 09:38:33

标签: c++ c

我需要在str3中加入“Hello World”。我怎么能这样做?

const char *one = "Hello ";
char *two = "World";
char *str3;

4 个答案:

答案 0 :(得分:7)

您必须首先为str3分配void* malloc (size_t size);,然后才能使用sprintf来写入字符串。

char *str3 = malloc(strlen(one) + strlen(two) + 1);
sprintf(str3, "%s%s", one, two);      //        ^  \0  termination 

添加@ Nik Bougalis建议:

应该知道dynamic memory allocation in C。在我的代码中,我使用malloc()进行了分配,因此当我不需要str3时我们应该在代码中使用free()显式释放内存。

另外,为了避免缓冲区溢出,请始终使用snprintf而不是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  

答案 1 :(得分:3)

阅读一本关于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.

答案 2 :(得分:2)

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();

答案 3 :(得分:1)

"Hello"这样的字符串文字存储在只读内存中,因此您需要将它们复制到可以修改它们的位置。

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