【发布时间】:2021-07-02 10:53:19
【问题描述】:
我的问题是关于sizeof 和内存分配。当我学习 C 和测试类型值时,我尝试了以下代码:
#include <stdio.h>
int main(void) {
char vec[0];
vec[0] = 1;
printf("\n SIZEOF: %li", sizeof(vec));
printf("\n VEC[0]: %li", vec[0]);
}
输出是:
> SIZEOF: 0
> VEC[0]: 1
为什么“vec[0]”的大小为“0 字节”,即使我添加了值“vec[0] = 1”? (如果我不添加这个值,只需声明向量“char vec[0] or int vec[0]”输出相同)。
Ricxk。你的时间。
【问题讨论】:
-
你声明了
char vec[0];... 为什么它会有一个sizeof()不是零?vec[0] = 1;是未定义的行为,因为您在数组外部写入。 -
编译器应该对你大喊大叫
char vec[0];- 数组不能声明为 0 大小。 -
在编译时启用所有警告可能是个好主意。
-
假设您使用的是 gcc,请参阅gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/Zero-Length.html
-
你必须使用
%zu来打印sizeof的结果
标签: arrays c declaration undefined-behavior sizeof