C++ 17 std :: to_chars是否添加了一个空终止符?

Poe*_*odu 14 c++ string-conversion c++17

http://en.cppreference.com/w/cpp/utility/to_chars

引用没有说明任何内容,但是示例(对我来说)显然使用以null结尾的字符串,否则它怎么能知道在哪里结束,因为std::array::data只返回一个指针.

#include <iostream>
#include <charconv>
#include <array>

int main()
{
    std::array<char, 10> str{};
    std::to_chars(str.data(), str.data()+str.size(), 42);
    std::cout << str.data();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是我无法自己测试,因为AFAIK还没有编译器支持它:https: //en.cppreference.com/w/cpp/compiler_support

编辑:忘记str用零初始化,但问题仍然相关.

Nic*_*las 19

C++ 17规范没有​​声明to_chars添加NUL终结符:

所有命名的函数都通过连续填充范围[ ,]来to_chars转换value为字符串,其中[ ,)必须是有效范围.如果构件的返回值是这样的值,当转换为,是,转换成功和构件是写入的字符的一过去最结束指针.否则,成员具有值,成员具有值,并且未指定范围[ ,)的内容.firstlastfirstlastecboolfalseptrecerrc::value_too_largeptrlastfirstlast

关于该段落中的NUL终结符或专门定义单个to_chars重载行为的段落,没有任何说明.因此,它没有写一个.

该示例有效,只要to_chars不产生超过9个字符.由于str初始化为所有NUL字符,因此未写入的任何内容str都将保留为NUL字符.


为此,提出它的原始论文P0067R0明确指出to_chars函数不应该NUL终止字符串.