我试图理解字符串中的数组概念。
char a[5]="hello";
在这里,数组a是大小为5的字符数组。“ hello”占据了数组索引的0到4。由于我们已经将数组大小声明为5,所以在字符串末尾没有空间存储空字符。 。
所以我的理解是,当我们尝试打印a时,它应该一直打印到遇到空字符为止。否则也可能会遇到分段错误。
但是,当我在系统中运行它时,它总是打印“ hello”并终止。
任何人都可以澄清我的理解是否正确。还是取决于我们执行的系统。
像往常一样,答案是:
未定义的行为是未定义的。
这意味着,尝试将此字符数组提供给处理字符串的函数是错误的。这是错误的,因为它不是字符串。甲串中C是字符序列,与一个结束\0
字符。
C标准将告诉您这是未定义的行为。因此,任何事情都可能发生。在C语言中,您没有运行时检查,仅执行代码。如果代码具有未定义的行为,则必须做好任何准备。这包括意外地进行预期的工作。
数组后面的内存中的字节很可能恰好是一个\0
字节。在这种情况下,它将寻找任何处理此“字符串”的函数,就好像您传递了一个有效的字符串一样。崩溃只是等待代码看似无关的更改发生。
您可以尝试char foo = 42;
在数组定义之前或之后添加一些内容,很有可能会在输出中看到它。但是当然不能保证,因为同样,未定义的行为也是未定义的:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句