以指针表示法将每个其他元素从一个数组复制到另一个数组

问题描述 投票:0回答:1

我正在制作一个函数复制,它将把所有其他元素从 *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';
        }
    }
}   
c++ arrays pointers char
1个回答
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';
© www.soinside.com 2019 - 2024. All rights reserved.