gpt4 book ai didi

c - C函数在char [] segfaults中交换两个char,尽管不使用字符串文字

转载 作者:行者123 更新时间:2023-12-02 07:02:35 26 4
gpt4 key购买 nike

我已经在GDB中验证了程序在*(a)= *(b)行上崩溃。这对我来说没有意义。

在我的主要功能中,我为char *字符串分配了5个字节。我传递了两个要交换的指针,一个是由sizeof(char)偏移的字符串,另一个是指向字符串的指针。这些指针被复制到swap()的调用堆栈中。我之前分配的5个字节应该仍然在堆栈上,因此swap()在引用和写入堆栈上的那些位置时应该没有问题,对吗?

  int main(int argc, char* argv[])
{
char *string = "abcd";
swap((string+1), string);
printf("%s\n",string);
return 0;
}

void swap(char *a, char *b)
{
if(!a || !b)
return;

char temp = *(a);
*(a) = *(b);
*(b) = temp;
}

最佳答案

char *string = "abcd";

是指向字符串文字的指针,字符串文字在C中是不可变的。修改字符串文字会引起 undefined 的行为。

string的声明更改为:
char string[] = "abcd";

修复您的程序。这里 string是一个数组,使用字符串文字的内容初始化并且可以修改。

关于c - C函数在char [] segfaults中交换两个char,尽管不使用字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17935639/

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