设置指向长度为 n 的新缓冲区的指针
Setting a pointer to a new buffer of length n
我正在尝试重新创建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;
}
相关文章:
- 将字符缓冲区强制转换为函数指针
- 将指针作为缓冲区传递到第一个字符串元素
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- char p[0]表示自动分配的缓冲区还是安全指针
- 指针符号在参数规范中表示什么,例如:(char16 *缓冲区,int32 大小)?C++
- OpenGL:使用指向静态数据的指针数组传递缓冲区数据
- 重置/包装 C/C++ 中的变量(环缓冲区指针)
- 将 char* 推送到矢量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到矢量中
- 返回指向矢量数据的指针,而不复制缓冲区和内存泄漏
- memcpy指向炭缓冲区的指针
- 来自 2 个指针的组合缓冲区,无需复制
- 来自指针向量的OpenGL阵列缓冲区
- C++:使用std::ifstream读取二进制文件后删除缓冲区/指针时发生访问冲突
- 如何将一个缓冲区指针的内容复制到另一个缓冲区指针
- 正在将缓冲区/指针设置为null
- 将额外的字节填充到要通过网络发送的flatbuffer的缓冲区指针
- 从缓冲区指针计算堆栈中的返回地址
- MPI_scatter:缓冲区指针无效
- MPI_Pack:无效缓冲区指针
- GetIndices()会在CreateIndexBuffer()和SetIndices()之后返回相同的缓冲区指针吗?