gpt4 book ai didi

更改数组中的元素值未正确反射(reflect)

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:25 24 4
gpt4 key购买 nike

我需要为我的计算机科学项目理解这一点,但我不确定发生了什么,代码是

#include <stdio.h>
void main () {
char x[6] = "12345\0";
char y[6] = "67890\0";
y[7]='A';
printf("X: %s\n",x);
printf("Y: %s\n",y);
}

输出是:

X: 1A345
Y: 67890

现在,当我明确指定 y 时,我不确定为什么 A 位于 x 数组的第二个元素中。

最佳答案

你的程序正在显示 undefined behaviour 是怎么回事? .

记住,

  1. string literals 根据定义以 null 结尾。
  2. C 数组以 0 为基础。索引。

澄清一下,

  • 当您尝试将像 "12345\0" 这样的字符串文字放入一个包含 6 个 char 元素的数组中时,编译器将尝试放置一个额外的 null在字符串文字的元素之后,这将成为访问过去分配的内存区域的尝试,这又会调用 undefined behaviour .在 char x[6] = "12345\0"; 的情况下,您不需要 \0 作为字符串文字的一部分。此外,当您为初始化提供字符串文字时,最好将元素的分配(换句话说,数组的大小)留给编译器。你可以使用

    char x[ ] = "12345";
  • 然后,有一个维度为 x 的数组,对该数组的有效访问是从索引 [0][x-1] 。在分配的内存之外访问也是 UB。例如,上面的数组 x,可以(应该)在类似

    的范围内安全访问
    len = strlen(x);      //get the length of the string
    for (int i = 0; i < len; i++)
    {
    x[i] = i*i; //access the array

    }

也就是说,请注意 main() 的推荐签名是 int main(void)

关于更改数组中的元素值未正确反射(reflect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644765/

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