访问空终止字符
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("");
比较这个,不是重复而是类似的问题:
受此启发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("");
比较这个,不是重复而是类似的问题: