gpt4 book ai didi

c - 尝试修改指向数组的指针时出现段错误

转载 作者:行者123 更新时间:2023-11-30 15:36:09 24 4
gpt4 key购买 nike

当我尝试修改指向数组的指针时,为什么会出现段错误?我的例子是:

void delete_string(char** string) {
while (*string[0] != '\0') {
*string = *string + 1;
}
}
int main() {
char aux1[] = "a string";
delete_string(&aux1);
return 0;
}

最佳答案

用户3461734的回答实际上是正确的,但没有真正解释原因。第一条线索是您收到的编译器警告:

t.c:8: warning: passing argument 1 of ‘delete_string’ from incompatible pointer type
t.c:1: note: expected ‘char **’ but argument is of type ‘char (*)[9]’

您的函数需要一个指向字符的指针。您实际上给了它一个指向 9 个字符数组开头的指针。

这个表达式:

*string[0] != '\0'

告诉它取消引用所提供的指针。您给了它一个指向包含字符“字符串”的字符串的指针 - 它将这些字符解释为指针,而不是一组字符。该指针指向类似地址 0x676e697274732061 的地址(或者至少在我的基于 Intel 的 64 位系统上是这样)。如果仔细观察,您会发现该地址是字符串的 ascii 字符的倒序(61='a'、20=' '、73='s' 等)。

如果您要将 aux1 的声明更改为:

char *aux1 = "a string";

它会起作用,因为现在您正在声明一个指针变量(类型为 char*),该变量被初始化为指向包含字符“字符串”的只读内存区域。当您将 &aux1 传递给函数时,您正在向其传递一个指向指针变量的指针,这正是您的函数所期望的。

但是,它可能不会执行您想要的操作,即读取其余代码。在函数结束时,aux1 指针将指向字符串的空终止处。我不太清楚这是如何删除字符串或之后您将如何处理指针。

关于c - 尝试修改指向数组的指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22646442/

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