访问空终止字符

Accessing null-terminated character

受此启发question

代码:

#include <stdio.h>

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

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

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

本质上,您传递的是一个空 字符串 作为参数,因此它应该被这样处理。

对于 %s 转换说明符,具有 printf() 系列

[...]Characters from the array are written up to (but not including) the terminating null character.[...]

在您的例子中,空终止符恰好出现在 数组 的第一个元素处,就是这样。

澄清一下,访问空终止符是可以的,访问 NULL 指针是不行的,它们是不同的东西!!

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

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

你的代码和

基本一样
 printf("");

比较这个,不是重复而是类似的问题: