有弹性创造char *的机会吗?

时间:2018-01-08 00:37:08

标签: c++ arrays sockets char concatenation

所以,我正在使用char *,const char *;我有这样的事情:

char* message = "My name is: (put a name), and I am (number) year old.";

问题是我真的不知道如何弹性地从键盘接收数据。我的意思是这样的:

std::cin >> name >> years;
char* message = "My name is: %name, and I am %years year old";

请不要回答:为什么你不想在字符串上使用。我知道那个图书馆并不是我想要的,为什么?因为我正在编写套接字的东西而且它没有给我结果我正在寻找。 任何建议如何创建或连接2 const char *或char *为1?

1 个答案:

答案 0 :(得分:1)

  

有什么建议我如何创建或连接2个const char *或char *为1?

您可以使用以下算法连接char*指向的两个字符串:

let s1 and s2 be pointers to character strings to be catenated
let l1 be the length of s1
let l2 be the length of s2
let o be a dynamic array of char of length l1 + l2 + 1
copy s1 into the range [o      ... o + l1     )
copy s2 into the range [o + l1 ... o + l1 + l2)
set o[o + l1 + l2] to be the null terminator character
store the address of o in a pointer: this is the output

请记住,必须销毁动态分配的对象。我建议使用标准容器来处理内存管理,以避免意外的UB或内存泄漏,并保持代码可读。

在C ++中的简单实现:

const char* s1 = input1;
const char* s2 = input2;
auto str = std::string(s1) + s2;
const char* catenated = str.c_str();