使用 strlen 时不一致

Inconsistency when using strlen

如果将 SIZE 从 7 更改为 8,则下面的代码会出现不一致。如果 SIZE 为 7,则 strlen(chars) returns 7;如果 SIZE 为 8,则 strlen(chars) returns 9,不再等于 SIZE

我知道 strlen 适用于 C 字符串,下面的 chars 不是 C 字符串(因为它没有空终止字符 [=19= ]).但我目前正在调试其他人的代码,并试图理解为什么即使 strlen 似乎没有以正确的方式使用,也会出现所描述的不一致。有什么想法吗?

#include <iostream>
#include <string>

#define SIZE 7
int main ()
{
  char chars[SIZE];

  for (int i=0; i<SIZE; i++) chars[i]='A'+i;
  std::cout<<"strlen(chars)   = "<<strlen(chars)<<std::endl;;
  std::cout<<"SIZE   = "<<SIZE<<std::endl;;
  return 0;
}

来自http://en.cppreference.com/w/cpp/string/byte/strlen

The behavior is undefined if there is no null character in the character array pointed to by str.

这意味着任何事情都可能发生。