gpt4 book ai didi

c - 如果我定义一个 X 元素的字符数组并向其中添加 Y (>X) 元素会怎样?

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:40 25 4
gpt4 key购买 nike

在每个字符串后添加一个 NUL 字符。因此,如果我定义一个包含 10 个元素的字符数组并放入 6 个元素,则第 7 个元素自动为空字符。 (如果我在某处错了,请纠正我。)

所以如果我制作一个包含 3 个元素的字符数组,然后像这样将 4 个字母放入其中

char array[3]={'h','i','y','a'};

而且我没有输入 NUL 字符,会发生什么情况?是否在最后位置添加了空字符?我会收到错误消息吗?

很抱歉,通常我只是尝试运行代码,但我的虚拟机由于某种原因不断崩溃。

最佳答案

根据 C 标准(C11 6.7.9. 初始化),这是必须诊断的约束违规:

Constraints

2 No initializer shall attempt to provide a value for an object not contained within the entity being initialized.

比如gcc和clang会报

x.c: In function 'main':
x.c:4:30: warning: excess elements in array initializer
char array[3]={'h','i','y','a'};
^
x.c:4:30: note: (near initialization for 'array')

那么会发生什么,即编译器生成什么代码?在 C 术语中,违反约束是未定义的行为,所以答案是:我们无法判断。有些编译器可能会忽略额外的字符,有些可能会扩展数组维度。有些人可能会拒绝编译它。有些可能会创建损坏的程序。这就是优秀程序员避开未定义行为的原因。

关于c - 如果我定义一个 X 元素的字符数组并向其中添加 Y (>X) 元素会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43743517/

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