首页 > 解决方案 > 为什么我打印的是 Hp 而不是空行?

问题描述

我有一个非常简单的问题,为什么这段代码的输出是这样的?

我正在使用带有 TDM-GCC 4.9.2 64 位的 Dev-C++ 5.11

#include <iostream>
using namespace std;
int main()
{
    char *ptr;
    char Str[] = "abcdefg";
    ptr = Str;
    ptr += 8;
    cout << ptr;
    return 0;
}

我希望代码打印一个空行。

出于某种原因,位置 7 似乎有一个空格字符,您可以通过更改ptr +=8;ptr+=7;.

但对我来说更奇怪的是还有 3 个字符无法显示,除非您超出数组限制 2,在这种情况下,我们将 8 添加到指针。字符是:“H,(一个奇怪的填充正方形),p”

我的电脑输出的截图

标签: c++

解决方案


我希望代码打印一个空行。

这种期望是错误的。程序的行为是未定义的。

由于某种原因,位置 7 似乎有一个空格字符

那没有。位置 7 处有一个空终止符。

但对我来说更奇怪的是还有 3 个字符无法显示,除非您超出数组限制 2 ...

访问超出其边界的数组的行为是未定义的。


推荐阅读