Arrays 使用某些库函数时的字符数组大小
当使用一些处理字符数组(而不是Arrays 使用某些库函数时的字符数组大小,arrays,function,stdstring,const-char,Arrays,Function,Stdstring,Const Char,当使用一些处理字符数组(而不是std::string)的库函数(例如strftime(),MultiByteToWideChar())时,有两个选项: 使用固定大小的数组(例如字符缓冲区[256];),由于字符串长度限制,该数组显然不好 使用new分配所需的大小,当您想要创建这样的实用功能时,这也是不好的: char * fun(void) { char * array = new char[exact_required_size]; some_function(array);
std::string
)的库函数(例如strftime()
,MultiByteToWideChar()
)时,有两个选项:
- 使用固定大小的数组(例如
),由于字符串长度限制,该数组显然不好字符缓冲区[256];
- 使用
分配所需的大小,当您想要创建这样的实用功能时,这也是不好的:new
因为该函数的用户必须char * fun(void) { char * array = new char[exact_required_size]; some_function(array); return array; }
删除
数组
std::string
,因为它的长度是可变的,其析构函数负责释放内存,但许多库函数不支持std::string
(是否应该是另一个问题)
好的,那有什么问题?那么,我应该如何使用这些函数呢?使用固定大小的数组或使用
new
,让我的函数的用户担心释放内存?或者可能实际上有一个我没有想到的平滑解决方案?您可以使用std::string
的方法获取一个指向字符数组的指针,该字符数组与string
对象中当前包含的字符序列相同。字符指针返回指向位于内部内存某处的常量、不可修改的字符数组的点。您不必担心取消分配此指针引用的内存,因为字符串
对象的析构函数将自动执行此操作
但是关于你最初的问题:取决于你希望函数如何工作。如果要修改在函数中创建的字符数组,听起来需要在堆上分配内存并返回指向它的指针。用户必须自行释放内存——有很多标准库函数都是这样工作的
或者,您可以强制用户将字符指针作为参数传入,这将确保他们已经创建了数组,并且知道他们自己需要释放内存。这种方法使用得更频繁,可能更可取。我不确定我是否理解——你说我可以这样做:
std::string buffer;strcpy(buffer.data(),“text”)代码>?