我想知道:如果char *cs = .....;指向一个巨大的内存块,但其中没有'\0',那么strlen()和printf("%s",cs)会发生什么? 我写下了以下代码:
char s2[3] = {'a','a','a'};
printf("str is %s,length is %d",s2,strlen(s2));
我得到的结果是:"aaa","3",但我认为这个结果是因为空字符(或0字节)恰好驻留在s2 + 3位置造成的。 如何制作一个非空结尾的C字符串?strlen和其他C字符串函数严重依赖于'\0'字节,如果没有'\0',我只想更深入地了解这个规则。 备注:我对在SO上研究以下帖子产生了好奇心。 如何将const char *转换为std :: string 以及该帖子中的这些话: “实际上这比看起来要棘手,因为除非字符串实际上是nul终止的,否则无法调用strlen。”
std::string
。 - chrischar
数组。 - Jens Gustedt