使用strlen时不一致

时间:2017-11-27 12:48:37

标签: c++ strlen

如果您将SIZE从7更改为8,则以下代码会显示不一致。如果SIZE为7,则strlen(chars)将返回7;如果SIZE为8,则strlen(chars)会返回9,这不再等于SIZE

我知道strlen适用于C-string并且下面的chars不是C字符串(因为它没有空终止字符\0) 。但我正在调试其他人的代码,并尝试理解为什么所描述的不一致性发生,即使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;
}

1 个答案:

答案 0 :(得分:1)

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

  

如果str指向的字符数组中没有空字符,则行为未定义

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