设置指向长度为 n 的新缓冲区的指针

Setting a pointer to a new buffer of length n

本文关键字:缓冲区 指针 设置      更新时间:2024-09-26

我正在尝试重新创建STL字符串类的愚蠢版本。我正在尝试实现一个将 c 字符串作为参数的构造函数。

inline String::String(const char* s)
{
buffer = get_new_buffer(s);
size = strlen(s);
}

为了设置指针,我编写了一个函数 constget_new_buffer(char* n)为字符串重新分配一个新缓冲区并设置指向新缓冲区的指针。

inline char* String::get_new_buffer(char* n) const
{
return (strlen(n) == 0 ? nullptr : new char* [strlen(n)]());
}

我在get_new_buffer函数返回方面遇到问题。它告诉我返回类型与函数类型不匹配,但为什么会这样呢?在我的 return 语句中,为什么它不返回指向新缓冲区的指针,我的设置返回什么?

此代码存在几个问题:

  • get_new_buffer()被声明为返回一个char*指针,但正在分配一个char*[]数组,该数组衰减为char**指针。 这就是编译器抱怨的不匹配。 将额外的*放在数组的元素类型上。 你想要一个char数组,而不是一个指向char的指针数组。

  • 代码不会将输入s字符串的char元素复制到分配的buffer中。

  • 代码未检查s是否nullptr。 使用nullptr输入调用strlen()未定义的行为

尝试更多类似的东西:

inline String::String(const char* s)
{
buffer = get_new_buffer(s, size);
}
inline char* String::get_new_buffer(const char* n, size_t &size) const
{
char *buffer;
size_t bufsize = (n != nullptr) ? strlen(n) : 0;
if (bufsize > 0) {
buffer = new char[bufsize + 1];
strcpy(buffer, n);
}
else
buffer = nullptr;
size = bufsize;
return buffer;
}