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

Inv*_*tus 3 c++

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

char *abc = " Who cares";
int len= strlen(abc);
Run Code Online (Sandbox Code Playgroud)

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

Alo*_*ave 6

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)


Oli*_*rth 5

是的,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)