我正在制作一个函数复制,它将把所有其他元素从 *source 复制到 *destination 到给定的 numChars。因此,如果源是 Hello,并且 num chars 是 2,则目标将为“Hl”。然而,即使在传递 numChars 之后,循环也会运行,因此如果源是“Hello There”,则无论 numChars 设置为什么,目标最终都会是“HloTee”。有什么想法吗?
void copyWord(char * destination, const char * source, int numChars) {
while (*destination != '\0' && destination < numChars + destination){
if (*source) {
*destination = *source;
source += 2;
destination++;
}
else {
destination++;
*destination = '\0';
}
}
}
这种情况会导致一些问题。
*destination != '\0' && destination < numChars + destination
检查目的地是否位于末尾可能不会达到您想要的效果。如果目标以空字符串开始,则该循环将永远不会运行。
所以我们尝试将其更改为:
*source != '\0' && destination < numChars + destination
但是因为我们将
source
指针增加了 2,所以我们可以跳过空终止符。
让我们使用无聊的旧索引。
size_t dest_idx = 0;
size_t src_idx = 0;
size_t src_len = strlen(source);
while (src_idx < src_len && dest_idx < numChars) {
destination[dest_idx] = source[src_idx];
dest_idx++;
src_idx += 2;
}
destination[dest_idx] = '\0';