假设我的代码中有以下内容: -
char *abc = " Who cares";
int len= strlen(abc);
Run Code Online (Sandbox Code Playgroud)
这为我提供了abc的长度.我的疑问是Strlen如何确定abc的长度.当然它会查找null终止并返回值.但这是否意味着abc在我正在初始化它的值"Who cares"的地方被赋予Null?
char *abc = " Who cares";
Run Code Online (Sandbox Code Playgroud)
声明指向位于只读(实现定义)位置某处abd的字符串文字的指针"Who Cares".是的,它是NULL终止.
不要尝试修改此字符串文字,因为它会导致未定义的行为.
另外,在C++中,声明这个的正确方法是:
const char *abc = " Who cares";
Run Code Online (Sandbox Code Playgroud)
是的,strlen遍历指向的内存,abc直到找到空终止字符.
abc未使用null初始化.编译器将字符串放在内存中(包括隐式空终止字符); abc然后用字符串中第一个字符的地址初始化.
所以:
0x1234 0x123E (example addresses)
+--+--+--+--+--+--+--+--+--+--+--+
| |W |h |o | |c |a |r |e |s |\0|
+--+--+--+--+--+--+--+--+--+--+--+
^
|
|
abc = 0x1234
Run Code Online (Sandbox Code Playgroud)