访问以null结尾的字符

msc*_*msc 1 c arrays null-terminated

灵感来自这个问题.

码:

#include <stdio.h>

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

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

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

Sou*_*osh 5

基本上,你传递一个空字符串作为参数,所以它应该被视为这样.

对于%s转换说明符,与printf()family

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

在你的情况下,null终止符恰好出现在数组的第一个元素中,就是这样.

只是为了澄清,访问空终止符是可以的,访问NULL指针不正常,它们都是不同的东西!