c++ - 接收指向 C 风格字符串的指针作为参数并能够分配内存或修改它的正确方法是什么?

标签 c++ pass-by-reference cstring pass-by-pointer

我有以下方法签名:

int get_name(char* &name_out);

我想做的是为 name_out 分配 name 大小的内存,然后复制 name 的内容code> 到 name_out

还是改成:

int get_name(char &name_out[], int size);

并允许函数的用户首先分配和跟踪内存,并在给定数组的大小不足以包含字符串时返回错误?

我唯一不喜欢的是它要求 get_name() 函数的用户了解名称字符串的长度。

我觉得有两个函数 int get_name_length();get_name(char* name_out);

由于这是一个编程任务,所以有规定:

  1. 不允许使用字符串类。
  2. 必须使用 C 风格的字符串。
  3. 不能使用载体。
  4. 该函数必须返回一个 int 以指示错误。
  5. 不允许异常处理。

谢谢。

最佳答案

如果我理解正确的话,您要做的是为“strcpy”实现一个变体。

主要区别在于您将分配责任传递给复制函数,而“strcpy”将其留给用户。如果这是生产代码,那么我建议遵循业界习惯的“strcpy”方法。

如果它只是为了玩,那么用一个函数包装 strcpy 进行分配并坚持 strcpy 的接口(interface)。

关于c++ - 接收指向 C 风格字符串的指针作为参数并能够分配内存或修改它的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28208077/

相关文章:

c++ - OpenGL MRT glDrawBuffers() 参数编号和行为

c++ - 找到一个简单打印功能的大哦估计

c++ - 通过引用传递数据以构建它

arrays - 将数组指针传递给另一个类并为将来保留一个引用 - Swift

c++ - 两个项目之间的 MFC CString 链接器错误

c - 在 C 中,一次保存一个字符

c++ - C++中的C字符串比较问题

c++ - 为什么在列表初始化函数参数时显式构造函数不匹配?

c++ - 输入参数类型 "const double *&"是什么意思?

c++ - 并行程序 : How to find the bottleneck (CPU bound threads)