gpt4 book ai didi

c - 交换字符指针

转载 作者:行者123 更新时间:2023-12-01 13:55:58 25 4
gpt4 key购买 nike

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

void* swap(void* x, void* y, int size)
{
char* buffer[size];
memcpy(buffer,x,size);
memcpy(x,y,size);
memcpy(y,buffer,size);

}

int main()
{
char* wife = strdup("Wilma Deloitte");
char* husband = strdup("Fred");
printf("\n wife : %s husband : %s \n",wife,husband);
swap(wife,husband,sizeof(char*));
printf("\nAfter swap: \nwife : %s husband : %s \n",wife,husband);
printf("\n sieof : %d \n",(int)sizeof(char*));
return 0;
}

输出:

     wife : Wilma Deloitte husband : Fred 

交换后:

     wife : Fred husband : Wilma De 

sieof : 8

如果我传递 &wife 和 &husband,那么丈夫和妻子中存在的地址就会被交换,因此我得到正确的输出,交换了 fred 和 wilma deloitte 字符串 .. 因为妻子和丈夫字符串指向fred and wilma deloitte 的地址 ...

我已经通过 memcpy 交换丈夫和妻子内部的地址。我想在 fred 和 wilma deloitte 之间交换 5 个字母(因为“fred\0”是 5 个字符)。所以上面的输出必须是 Fred Deloitte 和 Wilma.. 为什么输出不是预期的..

最佳答案

您正在交换由 sizeof(char*) 确定的字节数。

在您的平台上,sizeof(char*),实际上,ANY 指针的大小始终为 8 个字节。

sizeof 不是测量字符串的工具。如果你想测量字符串的长度,你应该使用 strlen,而不是 sizeof

如果你只想交换他们的名字,试试这个:

swap(wife,husband,sizeof(husband)+1); // Swap 5 characters

void* swap(void* x, void* y, int size)
{
char buffer[size];
memcpy(buffer,x,size); // Buffer is now "Wilma " (no NULL-terminator)
memcpy(x,y,size); // x is now "Fred Deloitte"
memcpy(y,buffer,size); // y is now "Wilma" (no NULL-terminator)
}

注意有关 NULL 终止符的注释。
它更好,但并不完美。


如果您打算交换整个文本,请认识到 wife 包含 15 个字符,但 husband 仅包含 5 个字符。您建议如何填充 15 个字符的数据成 5 个字符的数组?

如果你是对字符串进行操作,我推荐使用字符串相关的函数:strlenstrcpystrcat,而不是 mem-函数

关于c - 交换字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33288463/

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