gpt4 book ai didi

c - 指针算术以 Code139(段错误)终止程序

转载 作者:行者123 更新时间:2023-11-30 19:59:49 24 4
gpt4 key购买 nike

我写了一个小程序来练习指针算术。如果我运行它,它会以代码 139 终止,这是一个段错误。我不知道为什么会出现这样的情况

*name1 = *name2;

导致段错误。这两个变量都在堆栈上,我应该有权访问。

据我了解,这应该将 name1 的第一个字母设置为 name2 第一个字母的值。

main.c 文件:

#include <stdio.h>

int main()
{
char* name1;
char* name2;

name1 = "Franz";
name2 = "Otto";

printf("Vorher:\n");
printf("Name1: %s\nName2: %s\n", name1, name2);

*name1 = *name2;

printf("Nachher:\n");
printf("Name1: %s\nName2: %s\n", name1, name2);

return 0;
}

如果你想重现它。我已使用以下 Dockerfile 运行它

FROM gcc:8
COPY ./src /usr/src/myapp
WORKDIR /usr/src/myapp
RUN gcc -o myapp main.c
CMD ["./myapp"]

最佳答案

您正在尝试修改 string literal这是 undefined behaviour 。在大多数平台上,尝试修改字符串文字会导致段错误。

您可能想要这个:

name1 = name2;

而不是:

*name1 = *name2;

或更可能您想要这个:

char name1[] = "Franz";
char name2[] = "Otto";

现在 name1name2 是堆栈上的数组,您可以根据需要进行修改。之前,只有指针 name1name2 位于堆栈上,而不是实际的字符串“Franz”和“Otto”。

顺便说一句,您的程序中不涉及指针算术

您应该阅读 C 教材中处理字符串的章节和处理指针的章节。

关于c - 指针算术以 Code139(段错误)终止程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52813890/

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