#include <stdio.h>
int main(void)
{
char test = 0x80;
printf("%c\n", test); /* To remove the "unused" warning */
return 0;
}
我知道一个字符保证是 一个 字节。 0x80 也是一个字节。那么为什么我会收到以下错误/警告?
就我而言,这是一个错误,因为我将警告视为错误。
0x80 是出现此警告/错误的最小值。如果我将其更改为 0x7F,则编译正常。我使用带有“C99 strict”选项的 ideone.com 来编译代码。它报告使用 gcc-4.7.2。
最佳答案
char
类型在您的编译器中已签名,因此即使它有 8 位信息,它也不能存储大于 127 (0x7f) 的值。
header <limits.h>
定义了宏,可让您确定整数类型的符号和范围限制,包括 char
。
关于c - 为什么这个程序会导致溢出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16056536/