【问题标题】:Why is sizeof(str) is equal to 8 , when it should be equal to strlen(str)+1 ... (because of extra null char)? [duplicate]为什么 sizeof(str) 等于 8 ,而它应该等于 strlen(str)+1 ...(因为额外的空字符)? [复制]
【发布时间】:2020-07-16 22:23:03
【问题描述】:

当我打印 strlen(str) 和 sizeof() 这是一个字符数组:

const char *str = "Geeksforgeeks"; 

当我打印 strlen(str) 和 sizeof(str) 时,它的输出为:

cout<<strlen(str)<<endl;
cout<<sizeof(str)<<endl;

输出:

strlen(str): 13
sizeof(str): 8
  • 不应该是这样;由于额外的空字符,sizeof() 应该返回 14?
  • 我对较小的字符串进行了尝试,sizeof() 的值没有改变,仍然是 8?

【问题讨论】:

  • sizeof 的返回值仅取决于表达式的类型,与其他无关。 str的类型是const char *,指针的大小不依赖于它指向的数据。
  • 容器的大小不依赖于容器的内容。改变变量的值不会改变它的大小。
  • stackoverflow.com/questions/17298172/…。 strlen 返回字符串的长度,其中 sizeof() 是 char ptr 的大小。
  • David Schwartz 在他的评论中暗示了关于指针的一些非常重要的事情:指针只是另一种数据类型,其中值恰好是存储中的一个位置。了解这一点将帮助您理解为什么有时需要通过引用传递指针。
  • 这是一个 char 数组: -- 不,这是一个字符串字面量 -- 指针不是数组。将其更改为char str[] = "Geeksforgeeks";,您可能会看到您正在寻找的结果。

标签: c++ string sizeof strlen


【解决方案1】:

为什么sizeof(str)等于8

因为str的类型是const char *,即指向const char的指针,而你系统上的指针大小恰好是8字节。

当它应该等于 strlen(str)+1 …

不应该,因为该数字不是sizeof 运算符返回的类型的大小。

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 2013-08-17
    • 1970-01-01
    • 2020-08-25
    • 2011-11-05
    • 1970-01-01
    • 2014-07-04
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多