Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 访问以空结尾的字符_C_Arrays_Null Terminated - Fatal编程技术网

C 访问以空结尾的字符

C 访问以空结尾的字符,c,arrays,null-terminated,C,Arrays,Null Terminated,受此启发 代码: #include <stdio.h> int main() { char arr[] = "Hello"; char *ptr = arr + 5; printf("%s\n",ptr); } #包括 int main() { char arr[]=“你好”; char*ptr=arr+5; printf(“%s\n”,ptr); } 在上面的代码中,我访问了以null结尾的字符 那么,当访问文本字符串中以null结尾的字符时,实际会发生什么

受此启发

代码:

#include <stdio.h>

int main()
{
   char arr[] = "Hello";
   char *ptr = arr + 5;
   printf("%s\n",ptr);
}
#包括
int main()
{
char arr[]=“你好”;
char*ptr=arr+5;
printf(“%s\n”,ptr);
}
在上面的代码中,我访问了以null结尾的字符


那么,当访问文本字符串中以null结尾的字符时,实际会发生什么?这是未定义的行为吗?

本质上,您传递的是一个空字符串作为参数,因此应将其视为空字符串

对于
%s
转换说明符,使用
printf()
系列

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

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


只是为了澄清一下,访问空终止符是可以的,访问
null
指针是不可以的,它们都是不同的事情

本质上,您传递的是一个空字符串作为参数,因此应将其视为空字符串

对于
%s
转换说明符,使用
printf()
系列

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

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


只是为了澄清一下,访问空终止符是可以的,访问
null
指针是不可以的,它们都是不同的事情

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

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

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

您的代码基本上与

 printf("");
比较这个问题,不是重复的,而是类似的问题:


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

您的代码基本上与

 printf("");
比较这个问题,不是重复的,而是类似的问题:

你说的“访问”是指阅读?为什么空字符与字符串中的任何其他字符有任何不同?如果你试图写,超出了字符串的界限,那么效果是未定义的。“访问”是指阅读?为什么空字符与字符串中的任何其他字符有任何不同?如果您试图写入,但超出了字符串的边界,则效果未定义。