【发布时间】:2012-06-12 04:04:36
【问题描述】:
在许多代码示例中,人们通常在创建一个新的字符数组后使用'\0',如下所示:
string s = "JustAString";
char* array = new char[s.size() + 1];
strncpy(array, s.c_str(), s.size());
array[s.size()] = '\0';
我们为什么要在这里使用'\0'?
【问题讨论】:
-
cstrings 通常不是 C++ 代码中最好的主意
-
C 字符串,本质上是一个 char 数组,必须以 NUL 结尾。否则,
string.h中的函数将无法按预期运行。 -
在 C 中,你会看到很多。在 C++ 中,可能有更好的方法来完成同样的事情。
-
这样编译器就知道字符串结束了。
-
它不适用于编译器,它适用于库,可能还有您的代码。 C 不能正确支持数组。您可以拥有本地数组,但无法传递它们。如果您尝试,您只需传递起始地址(第一个元素的地址)。所以你可以让最后一个元素变得特别,例如'\0' 或总是传递大小,小心不要搞砸。我使用一组宏来传递起始地址、长度双元组。结构是另一种方式。上课是最好的方式。但是 C 没有类。