我需要在str3中加入“Hello World”。我怎么能这样做?
const char *one = "Hello ";
char *two = "World";
char *str3;
答案 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()将字符串文字复制到该数组中。