【发布时间】:2026-01-25 19:00:01
【问题描述】:
我是 C 编程新手,我很难理解为什么会这样
#include <stdio.h>
int main() {
int l = -5;
char arr[l];
printf("content: %s; sizeof: %d\n", arr, sizeof(arr));
}
带输出:
content: ; sizeof: -5
这不是:
#include <stdio.h>
int main() {
char arr[-5];
printf("content: %s; sizeof: %d\n", arr, sizeof(arr));
}
带输出:
name.c:6:10: error: size of array ‘arr’ is negative
6 | char arr[-5];
| ^~~
我预计第一个示例也会出现错误,但我真的不知道这里发生了什么。
【问题讨论】:
-
sizeof(即size_t)结果的格式说明符是%zu。这将解开这里的一个谜。 -
哦,我明白了,谢谢。顺便说一句,它看起来像一个巨大的数字,但问题还没有解决
-
我认为
l从char arr[l]转换为size_t这是一个无符号类型。要打印 sizeof,您需要%zu从 printf 获得正确的输出 -
@bolov 我只是想知道为什么文字
-5也没有被转换。可能是因为它是一个定义而不是一个陈述。 -
啊,可能是因为
-5不是 文字,而是带有一元-运算符和文字5的表达式