Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用某些库函数时的字符数组大小_Arrays_Function_Stdstring_Const Char - Fatal编程技术网

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”)