char中的内存[]

Memory in a char[]

本文关键字:内存 char      更新时间:2023-10-16

,所以我在C 11中工作,这是我发生的:

char s[100];
strcpy(s, "Andrei");
int n=strlen(Andrei); // (it would be 6)

我这样做:

s[n]='  '; 
s[n+9]='';

s [n 1],... s [n 8]会发生什么?如果我去

cout <<s;

阵列将显示为正常。

,但是如果我指定

cout <<s[n+2]

它将打印奇数字符

数组元素 s[n+1] ... s[n+8]是不可初学的。据说它们具有不确定的值。试图输出不确定的值会导致不确定的行为,这意味着任何事情都可能发生。

因此,您的缓冲区为100个字符。由于C 没有严格的初始化策略,因此您得到了大一些东西。每个应用程序的启动之间的内容会有所不同,可能会在不同的构建模式(调试/发布)等上不同。的确,查询"某物"就像试图在随机波浪上听收音机并听到噪声序列作为回报(每次您这样做时可能会有所不同)。

运行strcpy只能初始化第一个n个字符,其余的缓冲区仍然是"某物"。