【发布时间】:2013-08-06 20:17:08
【问题描述】:
我正在编写用于合并两个 C 字符串的简单函数。在尝试动态分配新的内存块时,我发现:
char * out = new char[size];
std::cout << strlen(out) <<std::endl;
size 为 4 时返回 16,size 为 22 时返回 40,依此类推。 有谁知道它为什么会这样以及如何为具有一定数量字符的 c-string 分配内存?
【问题讨论】:
-
你没有初始化字符串。
strlen()需要一个以 0 结尾的缓冲区。被问了很多次... -
是的 - 只要我在一个问题中看到 strlen() ......
-
目前尚不清楚这是否与提议的原件重复。该问题涉及将
strlen应用于已初始化但不包含终止空字符的数组。此问题将strlen应用于未初始化的数组。从问题中不清楚混淆是关于strlen的操作方式还是关于new是否以及如何初始化以这种方式分配的数组。 -
@H2CO3 - 就像我在整个空闲时间都在阅读 SO 并且知道这一点。问题是分配问题,但缺少字符串终止符。这只是一件简单的事情,因为您很长时间没有使用它,所以您会从脑海中浮现。它总是让我感到惊讶——SoftDev 的家伙如何在被问到一个简单的问题时获得如此大的打击。好建议 - 如果它对你的灵魂造成太大伤害,而你要表达它的作用,而不是给出真正的答案 - 那就不要这样做。
-
@EricPostpischil 对,你有更好的骗子吗?我很有信心这是重复的。
标签: c++ c char new-operator