不知道为什么我在使用字符串或字符时获得不同的长度

Aar*_*ron 1 c++ linux string char

当我使用char调用gethostname我的长度为25但是当我使用字符串时我的长度是64.不确定为什么.他们两个我在HOST_NAME_MAX上声明了相同的大小.

        char hostname[HOST_NAME_MAX];
        BOOL host =  gethostname(hostname, sizeof hostname);
        expectedComputerName = hostname;
        int size2 = expectedComputerName.length();

        std::string test(HOST_NAME_MAX, 0);
        host =  gethostname(&test[0], test.length());
        int  testSize = test.length();
Run Code Online (Sandbox Code Playgroud)

650*_*502 5

一个std::string对象可以包含NULS(即'\0'字符).您将名称存储在以HOST_NAME_MAX长度大小创建的字符串对象的第一个字节中.

在字符串数据的开头存储内容不会改变因此保留的字符串的长度HOST_NAME_MAX.

从char指针创建字符串时,创建的std::string对象将包含最多但不包括第一个NUL字符(0x00).原因是C字符串不能包含NULs,因为第一个NUL字符串用于标记字符串的结尾.