【发布时间】: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";,您可能会看到您正在寻找的结果。