gpt4 book ai didi

c - 写入指针时出错,可通过更改指向数组的指针来解决。发生了什么?

转载 作者:行者123 更新时间:2023-11-30 14:34:49 26 4
gpt4 key购买 nike

所以我用 C 语言编写了一个数独求解器,然后我想到了一些我没有想到的东西。

数独被存储为指向字符的全局指针。

char *sudoku=
"200050713"
"431000805"
"675800094"
"016075000"
"740268901"
"052914037"
"527600109"
"164090382"
"080102006";

在程序的某个时刻,我自然必须写入数组,为了保持简单(且合法),让我们说:

sudoku[1] = '1';

我在该线路上收到 SIGSEGV。只需将全局变量数独的类型更改为数组即可解决。

char sudoku[] = ...

如果您想知道,没有任何其他名为数独的变量或函数。我很好奇这种行为,全局指针是只读的吗?

最佳答案

I'm curious about this behaviour, is a global pointer read-only?

它与全局变量无关。调用 char *s = "asdf" 在只读内存中创建一个数组,并将指针 s 指向它。好吧,更准确地说,它不一定是只读内存,但它可能是,并且无论如何它都是尝试写入它的未定义行为。与执行此操作大致相同:

const char arr[] = "asdf";
char *s = arr;

但是,您的第二次尝试初始化一个数组,并注意它与上面代码片段中的第一行有多么相似。只需删除 const 即可获得相同的结果。

关于c - 写入指针时出错,可通过更改指向数组的指针来解决。发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58824454/

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