代码之家  ›  专栏  ›  技术社区  ›  msc

访问以空结尾的字符

  •  1
  • msc  · 技术社区  · 6 年前

    受此启发 question 是的。

    代码:

    #include <stdio.h>
    
    int main()
    {
       char arr[] = "Hello";
       char *ptr = arr + 5;
       printf("%s\n",ptr);
    }
    

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

    那么,当访问文本字符串中以空结尾的字符时,实际会发生什么?这是不明确的行为吗?

    3 回复  |  直到 6 年前
        1
  •  5
  •   Sourav Ghosh    6 年前

    本质上,你传递的是一个空的 一串 作为论据,所以应该这样对待。

    为了 %s 转换说明符,具有 printf() 家庭

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

    在您的例子中,空终止符碰巧出现在 阵列 ,就这样。

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

        2
  •  4
  •   Yunnosch    6 年前

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

    您的代码基本上与

     printf("");
    

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

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

        3
  •  1
  •   Matteo Italia    6 年前

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