std :: string在初始化字符串文字时附加一个空终止符吗?

时间:2016-11-07 03:41:43

标签: c++ string

#include <iostream>
#include <string>
#include <cstring>

int main()
{
    using namespace std;
    string cppString = "string1";

    //size of C++ String
    cout << sizeof(cppString) << endl;
    cout << cppString << endl;

    //To list the corresponding ASCII code for C++ String
    for (int index = 0; index < sizeof(cppString); ++index)
            std::cout << static_cast<int>(cppString[index]) << " ";

    char cString[] = "string2";

    //size of C String
    cout << "\n" << sizeof(cString) << endl;
    cout << cString << endl;

    //To list the corresponding ASCII code for C String
    for (int index = 0; index < sizeof(cString); ++index)
            std::cout << static_cast<int>(cString[index]) << " ";
}

Output:

24
string1
115 116 114 105 110 103 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
8
string2
115 116 114 105 110 103 50 0 

我是编程新手。我已经尝试使用谷歌搜索答案,但可用的解释超出了我的理解范围。

我知道C String是在创建时伴随null终止符而C ++字符串不是。但是,当我测试C ++字符串和C字符串在内存中保存了哪些ASCII代码时,看起来C-String不仅具有空终止符(如预期的那样),而且C ++字符串最终也会以连续的空终止符结束。 ASCII码 49

在Gaddis的书中,它规定,所有程序的字符串文字都作为C字符串存储在内存中,并自动附加空终结符

问题:

  • 根据Gaddis书的信息,可能是我的字符串文字&#34; string1&#34;,被创建为C-String,末尾有空终止符,呈现 cppString 表现得像C-String,因此ASCII代码在 49 之后显示那些空终止符的原因是什么?

0 个答案:

没有答案