为什么需要空终止符?

Vin*_*sta 4 c++ string null terminator

在过去的几天里,我一直在教自己c ++,为我作为CS专业的新生一年做准备.我现在正在使用C风格的字符串,并想知道null终结符的意义.

我知道这是必要的,但我想我只是没有从根本上理解为什么一个字符串不会仅仅停留在它的最后一个字符串上.

das*_*ght 17

我只是没有从根本上理解为什么一个字符串不会只是在它的最后一个字符结束.

有几种方法可以知道"最后一个字符"在哪里:

  1. 将字符串中的字符数与字符串的字符分开存储,
  2. 放置一个标记,指示字符串的最后一个字符,或
  3. 将指针存储到字符串的最后一个字符串,与字符串的字符分开.

C选择第二条路线; 其他语言(Pascal等)选择第一条路线.C++的一些实现std::string选择第三个路由*.


*即使std::string使用第一种或第三种方法的实现也会使其缓冲区终止,以便与库的C部分兼容.这是确保c_str()返回有效C字符串所必需的.