gpt4 book ai didi

c - 减少指针直到指向数组的第一个元素

转载 作者:行者123 更新时间:2023-11-30 14:48:45 25 4
gpt4 key购买 nike

我使用*ptr从头到尾迭代一个char数组(一次一个字节)并以此方式设置一些值。当指针指向第一个地址时,算法应该停止。

  char *buf = (char*)malloc(sizeof(char) * 3 + 1);
char *ptr = &buf[sizeof buf - 1]; // *ptr point to the last address
*ptr = '\0';

do {
if(alfa) {
*(--ptr) = "teststring"[alfa]; // *ptr decreases value by one
alfa -= i;
} else { *(--ptr) = 'N'; }
} while(*ptr != &buf[0]); // should check if *ptr is now pointing to the start of buf. If that's the case, stop.

但是,在检查地址相等后,它给了我:

** stack smashing detected **: <unknown> terminated
Aborted (core dumped)

另一件事(也许是相关的)是:malloc 应该从内存中分配 4 个字节,但是当我检查 sizeof(buf) 时它有 8 个字节(?)。

注意:sizeof(char) * 3 + 1 的输出确实是 4。但它与 sizeof(buf) 不同。

最佳答案

sizeof some_variable 计算出变量的大小。

因此,sizeof buf 的计算结果为 buf 的大小。由于 buf 是一个指针,它会为您提供 4 或 8,具体取决于代码是在 32 位平台还是 64 位平台上编译。

要解决您的问题,请更改此

  char *buf = (char*)malloc(sizeof(char) * 3 + 1);
char *ptr = &buf[sizeof buf - 1];

到此

  size_t size = sizeof(char) * 3 + 1;
char *buf = malloc(size); /* No need to cast void-pointer sin C. */
char *ptr = &buf[size - 1]; // *ptr point to the last address

根据定义,考虑到 sizeof (char) 等于 1:

  size_t size = 3 + 1;
char *buf = malloc(size);
char *ptr = &buf[size - 1];

关于c - 减少指针直到指向数组的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50191241/

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