【问题标题】:Accessing null-terminated character访问以空字符结尾的字符
【发布时间】:2018-06-27 05:46:40
【问题描述】:

灵感来自question

代码:

#include <stdio.h>

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

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

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

【问题讨论】:

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

标签: c arrays null-terminated


【解决方案1】:

本质上,你传递的是一个空的字符串作为参数,所以它应该被这样对待。

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

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

在您的情况下,空终止符恰好出现在 array 中的第一个元素上,就是这样。

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

【讨论】:

    【解决方案2】:

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

    你的代码基本一样

     printf("");
    

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

    Effect of "+1" after the format string parameter to printf()

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-05
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        • 2010-12-23
        • 2013-04-07
        • 1970-01-01
        相关资源
        最近更新 更多