假设我的代码中包含以下内容: -
char *abc = " Who cares";
int len= strlen(abc);
这为我提供了abc的长度。我怀疑Strlen是如何确定长度的 abc在这里。当然它会查找null终止并返回值。但这是否意味着abc在我正在初始化它的值“Who cares”的地方被赋予Null?
答案 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