我正在编写简单的函数来合并两个C字符串。在尝试动态地分配新的内存块时,我发现:
char * out = new char[size];
std::cout << strlen(out) <<std::endl;
当size为4时返回16,当size为22时返回40,依此类推。 有没有人知道它为什么会这样,以及如何为具有一定数量字符的c-string分配内存?
答案 0 :(得分:5)
分配的内存未初始化。 strlen()
只是通过内存充电,直到遇到空字符('\0'
)。由于您尚未初始化out
指向的内存,因此该内存的内容未定义,因此strlen()
的行为也是如此。
strlen()
不衡量分配的大小,因此new
分配太多内存的解释是不正确的,因为您使用的工具来衡量分配的大小根本不会这样做。
在您的情况下,strlen()
正在超出此分配的范围。在这种情况下,结果可能是错误的&#34;价值(如你所见)或你的程序可能会崩溃。
答案 1 :(得分:0)
使用new
分配内存不会初始化内存:
char * out = new char[size];
// Add this code to initialize out
memset(out,'A',size-1);
out[size-1]='\0';
std::cout << strlen(out) <<std::endl;