gpt4 book ai didi

c - 通用类型交换 C 函数

转载 作者:行者123 更新时间:2023-11-30 19:25:16 27 4
gpt4 key购买 nike

我正在尝试编写一个简单的函数来交换相同类型的任意两个变量。

void swap(void* a, void* b, int size);

void swap(void* a, void* b, int size){
void* temp = malloc(size);

memcpy(temp, a,size);

memcpy(a, b, size);

memcpy(b, temp,size);

free(temp);
}

int main(int argc, char* argv[])
{
char name[] = "name";
char greet[] = "greet";

swap(name, greet, 30);

printf("%s\n", name);
printf("%s\n", greet);

return 0;
}

但是上面的代码打印的是:

`
name

memcpy(b, temp, size)之后,a(在交换中)指向的值更改为`,我不确定为什么?

最佳答案

当您调用 memcpy(b, temp,size); 且 size 等于 30 并且 b 指向的字符串的实际大小为 6 时,您基本上写过去你拥有的内存。

就您而言,您的程序实际上会损坏程序堆栈。如果在内存中 b 出现在 a 之前,则额外的 24 将有效地完全重写 a 的内容。

您必须检查大小是否小于或等于两个字符串的最小大小+ 1(以考虑空字符)。

关于c - 通用类型交换 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59129098/

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