【发布时间】:2018-04-13 15:33:37
【问题描述】:
#include <iostream>
#define SIZE 2
int main(int argc, char** argv)
{
char w = 'a';
char *array[SIZE];
array[0] = &w;
std::cout << *array << std::endl;
system("PAUSE");
return(0);
}
程序的输出是:a╠╠╠╠┴Kôè∞≈5«,┌。
Char 是一个字节长,所以输出应该是:a
或者它输出垃圾是因为 x86 的指针大小是 4 个字节(对于 int、double、float、char)而所有垃圾都是这 3 个字节?
【问题讨论】:
-
你为什么不只使用字符串?
-
@PasserBy 不,那是关于不期望打印 C 字符串。 Tracy 确实预料到了这一点,但没有提供有效的 C 字符串(因为它指向未使用 1 初始化的内存,并溢出到不允许访问的不相关内存中)。
-
你为什么要跟我说话?为什么不阅读其他人给出的非常明确的答案?
cout想要一个以NUL结尾的字符串,而您在内存的数据区域中给它一个从未声明为此类字符串的位置。没有什么可推理的;你只是做错了。 -
操作系统与它无关。语言定义了当你传递一个有效参数时必须发生的事情,而你没有这样做(所以代码被破坏了,发生的事情非常无趣)
标签: c++ string pointers character