受此question的启发。
代码:
#include <stdio.h>
int main()
{
char arr[] = "Hello";
char *ptr = arr + 5;
printf("%s\n",ptr);
}
在上面的代码中,我访问了以空字符结尾的字符。
那么,访问文字字符串中以null终止的字符时实际发生了什么?是未定义的行为吗?
答案 0 :(得分:5)
本质上,您要传递一个空的 string 作为参数,因此应将其视为此类。
对于%s
系列的printf()
转换说明符
[...]数组中的字符是 写入(但不包括)终止空字符。[...]
在您的情况下,空终止符恰好出现在 array 的第一个元素上。
为澄清起见,访问空终止符是可以的,访问NULL
指针不是可以的,而且它们都是不同的东西!
答案 1 :(得分:4)
您基本上仍在访问以null终止的字符串。
它只有零个字符,即不包含任何要打印的内容。
您的代码基本上与
相同 printf("");
比较一下,不是重复,而是类似的问题:
Effect of "+1" after the format string parameter to printf()
答案 2 :(得分:1)
没什么特别的。指向字符串的函数会将指向空字符的指针解释为零长度字符串。