字符串未在C中以空字符终止

时间:2018-03-07 16:42:04

标签: c string

请解释下面程序的输出,为什么数组打印到第10个数组索引,如果我没有终止带有空字符的字符串,它总是打印数组的大小然后循环终止,这意味着它现在找到了空字符。我每次在最后找到相同结果的大小时检查不同大小的数组,然后

null

2 个答案:

答案 0 :(得分:2)

数组访问超出范围是未定义的行为。您已访问数组索引超出范围。您已获得未定义的行为。

该程序可能已经崩溃,停止或完美地对待某个随机索引,或者只是在索引9处停止。无法保证会发生什么。建议您不要在代码中引入未定义的行为。不要这样做。 C不提供对数组索引的检查。你必须小心这个案子。

你不能称它为字符串 - 它是一个char数组。不是字符串。我们不能说它是字符串,除非它以\0结尾。

答案 1 :(得分:1)

您正在读取数组的末尾,这会导致未定义的行为。

在这种情况下,您将遇到用于存储i值的内存,该内存可能存储为四个字节0a 00 00 00(即,以little-endian字节顺序排列的数字10) )。

但是当你邀请UB时,任何事情都会发生。所以不要这样做!