303得票20回答
空字符结尾的字符串的原理是什么?

尽管我非常喜欢C和C ++,但我无法理解为什么选择空终止字符串: 长度前缀(即Pascal)字符串在C之前就存在。 长度前缀字符串通过允许常数时间长度查找使得多个算法更快。 长度前缀字符串使导致缓冲区溢出错误更加困难。 即使在32位机器上,如果允许字符串大小等于可用内存的大小,则长度前缀字...

131得票6回答
std::string有一个空终止符吗?

下面的字符串是否包含空终止符'\0'? std::string temp = "hello whats up";

55得票12回答
将非空结尾的无符号字符数组复制到std :: string中

如果数组以null结尾,那么这将非常简单:unsigned char u_array[4] = { 'a', 's', 'd', '\0' }; std::string str = reinterpret_cast<char*>(u_array); std::cout <&l...

54得票3回答
在C++11中,std::string是否始终以空字符结尾?

在2008年的一篇博文中,Herb Sutter提到了以下内容: 有一个积极的提案,计划在C++0x中进一步加强这一点,并要求空字符结尾,可能会禁止写时复制实现,出于并发相关的原因。这是论文的链接:http://www.open-std.org/jtc1/sc22/wg21/docs/pap...

54得票4回答
字符串终止 - char c=0 vs char c='\0'

当终止一个字符串时,逻辑上来说char c=0与char c='\0'等效,因为"null"(ASCII 0)字节是0,但通常人们倾向于使用'\0'。这是纯粹出于偏好还是更好的"惯例"?首选哪个? 编辑:K&R说:"字符常量'\0'表示值为零的字符,即空字符。常常使用'\0'代替0以...

52得票2回答
在主函数中,char * argv[] 参数是否以空字符结尾?

我想知道命令行参数是否始终以空字符结尾。谷歌似乎是肯定的,并且在GCC编译时也表明是这样,但我能保证这总是正确的吗? int main(int argc, char** argv) { char *p; for(int cnt=1; cnt < argc; ++cnt...

49得票4回答
一个 std::string 可以包含嵌入的空值吗?

对于普通的C字符串,空字符'\0'表示数据的结束。 那么对于std::string类型的字符串,我能否包含空字符呢?

43得票7回答
36得票10回答
为什么要使用以null结尾的字符串?或:以null结尾的字符串与字符+长度存储相比有何优劣之处?

我正在用C语言编写一款语言解释器,我的string类型包含一个length属性,如下所示:struct String { char* characters; size_t length; }; 因此,我必须在我的解释器中手动处理这种字符串,因为C语言没有内置支持。考虑到底层的C...

34得票4回答
一个非空结尾字符串的strstr()函数

我该如何在C语言中实现对计数字符串(即非空终止字符串)进行原地等效的strstr()操作?