【发布时间】:2017-02-04 18:13:39
【问题描述】:
当我写:char str[80]; 时,幕后发生了什么?
我注意到我现在可以立即设置 str = "hello"; 和 str = "hello world";。第一次strlen(str)是5,第二次是11;
但是为什么呢?我认为在str = "hello"; 之后,索引5 处的字符变为空(str[5] 变为'\0')。这不是说str的大小现在是6,我应该不能设置为"hello world"?
如果不是,那么strlen 和sizeof 每次如何计算正确的值?
【问题讨论】:
-
strlen不包括空字符。在任何情况下,将数据写入str数组,不会影响您声明此数组的大小 (80)。 -
是的,你做到了:“这不是说
str的大小现在是 6 吗?”。 -
我指的是尺寸,而不是长度
-
嗯,简而言之(正如我在第一条评论中已经提到的)——将数据写入变量确实会影响该变量的大小。例如:
int x = 5不会将x的大小从sizeof int更改为sizeof char,尽管5 可以放入char。 -
你不能做
str = "hello";。您不能分配给数组。