gpt4 book ai didi

c - 对字符串使用通用指针

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:33 24 4
gpt4 key购买 nike

<分区>

我正在尝试一个示例程序来了解通用交换功能。

/* 一个简单的通用交换函数 */

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

void swap(void* xp,void* yp,int size){
//void temp = *xp; // we cant declare a variable as void , as we need to konw to de-reference as its not specifying any size info
// Hence used the smallest type info - char
char buffer[size];
memcpy(buffer,xp,size);
memcpy(xp,yp,size);
memcpy(yp,buffer,size);
}

int main(){
int a = 10;
int b = 20;
double d=1.34;
double e=2.34;
char* s = "Hello";
char* t = "World";
printf("\n a : %s b : %s \n",s,t);
swap(s,t,sizeof(char*));
printf("\n a : %s b : %s \n",s,t);
return 0;
}

当我使用函数调用 swap(s,t,sizeof(char*)) 运行上述程序时,我遇到了段错误。但是,如果我使用 swap(&s,&t,sizeof(char*)) 运行它,我不会遇到任何段错误。

gdb o/p:

Breakpoint 2, swap (xp=0x4007ac, yp=0x4007b2, size=8) at swap_generic1.c:5
5 void swap(void* xp,void* yp,int size){
(gdb) s
8 char buffer[size];
(gdb) s
9 memcpy(buffer,xp,size);
(gdb) s
10 memcpy(xp,yp,size);
(gdb) s

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b64fe4 in ?? () from /lib/x86_64-linux-gnu/libc.so.6

问题的原因可能是什么。是当作为 s 和 t 传递时,参数分别分配有字符串“Hello”和“World”的地址,并且指针递增到其他位置以获取值。

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