首页 > 解决方案 > C中的fill_n是否有等效函数?

问题描述

如果我想将fill_n函数从 CPP 翻译成 C,那会是什么样子?

如果我在fill_n下面有两个函数,并且我想0在 C 中填充它,我该怎么做?

fill_n(vaToPa, number_of_virtual_memory, 0);
fill_n(paToVa, number_of_physical_memory, 0);

标签: c++c

解决方案


对于字节,您可以使用memset. 因为wchar_t你可以使用wmemset. 除此之外,标准库没有用于填充的通用函数。你可以做一个,但它看起来不像模板那么干净,所以在大多数情况下你可能想使用一个普通的 for 循环。它可能看起来像这样:

#include <stdio.h>
#include <string.h>

void my_fill_n(void *base, const void *fill, size_t nmemb, size_t size)
{
    for (char *i = base; i < (char *)base + nmemb * size; i += size)
        memcpy(i, fill, size);
}

int main(void)
{
    int a[10];
    my_fill_n(a, &(int){42}, sizeof a / sizeof *a, sizeof *a);
    for (unsigned i = 0; i < sizeof a / sizeof *a; ++i)
        printf("%d\n", a[i]);
}

输出:

42
42
42
42
42
42
42
42
42
42

请注意,与它my_fill_n相比std::fill_n,它也受到限制,因为它仅适用于数组,而不适用于任何其他数据结构。


推荐阅读