gpt4 book ai didi

c++ - 复制两个字符数组的模板函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:34 25 4
gpt4 key购买 nike

我正在尝试替换一个旧的 C 宏:

// Copy the contents of the character array b into character array a. If the source
// array is larger than the destination array, limit the amount of characters copied
#define STRCPY(a,b) if(b) strncpy(a, b, sizeof(a) < sizeof(b) ? sizeof(a) : sizeof(b))

我希望模板能有所帮助。也许是这样的,但它不起作用。

template <typename T, size_t N, typename TT, size_t M>
void scopy(T (dest[N]), const TT (src[M]))
{
strncpy(dest, src, N < M ? N : M);
}

int main()
{
char foo[10] = "abc";
char bar[5] = "xyz";
scopy(foo, bar);
}

gcc 报告错误

编辑:我的伪示例使用了与我遇到的实际编译器错误不同大小的数组。现已修复

 error: no matching function for call to ‘scopy(char [5], const char [10])’

最佳答案

您需要对数组的引用,因为数组不能按值传递(这也没有意义,因为您实际上想修改原始数组):

template <typename T, size_t N, typename TT, size_t M>
void scopy(T (&dest)[N], const TT (&src)[M])
{
strncpy(dest, src, N < M ? N : M);
}

您可能还应该在某处断言 sizeof(T) == 1sizeof(TT) == 1,否则 strncpy不会做正确的事。或者,如果您觉得现代,请将正文替换为:

std::copy_n(src, N < M ? N : M, dst);

关于c++ - 复制两个字符数组的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com