#include <stdio.h>

int main() {
    for (char c=0; c<128; c++) {
        printf("%c", c);
    }
}

代码的输出会一遍又一遍地打印整个字符列表.

但我也试着运行这段代码:

#include <stdio.h>

int main() {
    for (char c=0; c<127; c++) {
        printf("%c", c);
    }
}

The only change being the condition. It now runs fine without entering an infinite loop.
What is the reason for this?

推荐答案

在C中,char struct 只能保存—128到127之间的值.你的for循环try 到128,但是因为char只能保存到127,所以它永远不会到达128.

条件验证判断是否c为128,并在c == 128时停止.<当c = 127时,循环进行,使c +1 =—128.所以它一遍又一遍地循环,而且从来没有停止过,因为它从来没有达到128.

第二个循环停止在127,因为char struct 最多可以保持127,所以条件满足,循环结束.

C++相关问答推荐

在x86汇编中,为什么当分子来自RDRAND时DIV会引发异常?

堆栈在作用域阻塞后会被释放吗?

如何将字符串传递给函数并返回在C中更改的相同字符串?

在我的代码中,我需要在哪里编写输出函数?

为什么我可以在GCC的标签后声明变量,但不能声明Clang?

C指针概念分段故障

为什么我从CSV文件中进行排序和搜索的代码没有显示数据的所有结果?

==284==错误:AddressSaniizer:堆栈缓冲区下溢

如何使用唯一数字对整型进行分区

可变宏不能编译

用C++构建和使用DLL的困惑

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

我正在try 将QSORT算法实现为C++中的泛型函数

为什么二进制文件的大小不会随着静态数据的大小而增加?

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

不兼容的整数到指针转换传递';char';到类型';常量字符*

通过GTK';传递回调参数;s g_signal_connect()导致C中出现意外值

是什么阻止编译器优化手写的 memcmp()?

Makefile - 将 .o 文件放入子文件夹中

clion.我无法理解 Clion 中发生的 scanf 错误