使用 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
.
这意味着任何事情都可能发生。
如果将 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
.
这意味着任何事情都可能发生。