访问以空字符结尾的字符

时间:2018-06-27 05:46:41

标签: c arrays null-terminated

受此question的启发。

代码:

#include <stdio.h>

int main()
{
   char arr[] = "Hello";
   char *ptr = arr + 5;
   printf("%s\n",ptr);
}

在上面的代码中,我访问了以空字符结尾的字符。

那么,访问文字字符串中以null终止的字符时实际发生了什么?是未定义的行为吗?

3 个答案:

答案 0 :(得分:5)

本质上,您要传递一个空的 string 作为参数,因此应将其视为此类。

对于%s系列的printf()转换说明符

  

[...]数组中的字符是   写入(但不包括)终止空字符。[...]

在您的情况下,空终止符恰好出现在 array 的第一个元素上。

为澄清起见,访问空终止符是可以的,访问NULL指针不是可以的,而且它们都是不同的东西!

答案 1 :(得分:4)

您基本上仍在访问以null终止的字符串。
它只有零个字符,即不包含任何要打印的内容。

您的代码基本上与

相同
 printf("");

比较一下,不是重复,而是类似的问题:

Effect of "+1" after the format string parameter to printf()

答案 2 :(得分:1)

没什么特别的。指向字符串的函数会将指向空字符的指针解释为零长度字符串。