分配值时是否为char *终止字符串为空?

时间:2011-12-21 20:13:59

标签: c++

假设我的代码中包含以下内容: -

char *abc = " Who cares";
int len= strlen(abc);

这为我提供了abc的长度。我怀疑Strlen是如何确定长度的 abc在这里。当然它会查找null终止并返回值。但这是否意味着abc在我正在初始化它的值“Who cares”的地方被赋予Null?

2 个答案:

答案 0 :(得分:6)

char *abc = " Who cares";

向位于只读(实现定义)位置的字符串文字abd声明一个指针"Who Cares"。是的,它是NULL终止。

不要尝试修改此字符串文字,因为它会导致未定义的行为

另外,在C ++中,声明这个的正确方法是:

  const char *abc = " Who cares";

答案 1 :(得分:5)

是的,strlen遍历abc指向的内存,直到找到空终止字符。

abc未初始化为null。编译器将字符串放在内存中(包括隐式空终止字符);然后使用字符串中第一个字符的地址初始化abc

所以:

 0x1234                        0x123E  (example addresses)
+--+--+--+--+--+--+--+--+--+--+--+
|  |W |h |o |  |c |a |r |e |s |\0|
+--+--+--+--+--+--+--+--+--+--+--+
 ^
 |
 |
abc = 0x1234