为什么sizeof(str.substr(0,3).c_str())给我8?

时间:2012-05-19 20:47:58

标签: c++ string

string str = "abcdefgdcb";

cout << sizeof(str.substr(0,3).c_str());

由于某种原因,上面的字符串给了我8.我假设c_str()返回一个空字符串,而sizeof使用null来确定字符串的大小。

4 个答案:

答案 0 :(得分:9)

因为sizeof没有给出字符串的长度,所以它给出了类型的大小(在这种情况下为const char *)。试试strlen

答案 1 :(得分:3)

c_str返回const char *。在您的系统上sizeof (const char *) == 8,就像任何其他指针一样。

答案 2 :(得分:2)

8是机器上指针的大小(64位),这就是c_str()返回的内容。

使用strlen获取字符串的长度。

答案 3 :(得分:2)

  

我假设... sizeof使用null来确定字符串的大小。

有你的问题。 sizeof告诉你一个变量的大小,它与变量中的值无关。