【发布时间】:2015-10-12 18:33:09
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap (void *vp1, void *vp2, const size_t size) {
char *buffer = (char *)malloc(sizeof(char)*size);
memcpy(buffer, vp1, size);
memcpy(vp1, vp2, size);
memcpy(vp2, buffer, size);
free(buffer);
}
int main()
{
char *puppy = strdup("Wow");
char *kitty = strdup("Mew");
printf("%s, %s\n", puppy, kitty);
swap(&puppy, &kitty, sizeof(char **));
printf("%s, %s\n", puppy, kitty);
free(puppy);
free(kitty);
return 0;
}
我正在尝试使用void* 和memcpy() 来练习理解。在这段代码中,起初我认为swap(puppy, kitty, sizeof(char *)); 它可以工作。但是我不明白swap(&puppy, &kitty, sizeof(char **));的用法,有人能解释一下第二次交换是如何工作的吗?
【问题讨论】:
-
应该
const int size是const size_t size? -
两者都不对。
-
@user3528438 - 你有什么建议?
-
在第一种情况下,您正在交换字符串的内容,因此它要求两个操作数的长度相同,因此请使用
swap(puppy, kitty, 4);。第二种情况是切换指针的值,或者,指针指向的地方,应该是swap(&puppy, &kitty, sizeof(char *)); -
不要在 C 中转换
malloc。
标签: c memcpy void-pointers