gpt4 book ai didi

c - 使用指针修改字符串时发生段错误?

转载 作者:太空狗 更新时间:2023-10-29 16:45:46 28 4
gpt4 key购买 nike

上下文

我正在学习 C,我正在尝试使用指针反转字符串。 (我知道您可以使用数组;这更多是关于学习指针。)

问题

尝试运行下面的代码时,我不断遇到段错误。 GCC似乎不喜欢 *end = *begin; 行。 这是为什么?

特别是因为我的代码几乎与 the non-evil C function already discussed in another question 相同

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

void my_strrev(char* begin){
char temp;
char* end;
end = begin + strlen(begin) - 1;

while(end>begin){
temp = *end;
*end = *begin;
*begin = temp;
end--;
begin++;
}
}

main(){
char *string = "foobar";
my_strrev(string);
printf("%s", string);
}

最佳答案

一个问题在于您传递给函数的参数:

char *string = "foobar";

这是分配在只读部分的静态字符串。当您尝试用

覆盖它时
*end = *begin;

你会遇到段错误。

尝试

char string[] = "foobar";

您应该会注意到不同之处。

关键点是,在第一种情况下,字符串存在于只读段中,只使用指向它的指针,而在第二种情况下,具有适当大小的字符数组保留在堆栈中,静态字符串(始终存在)被复制到其中。之后您可以随意修改数组的内容。

关于c - 使用指针修改字符串时发生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2124600/

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