为什么ubuntu64位下C语言for循环不能超过2147483647次?(size_t )
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么ubuntu64位下C语言for循环不能超过2147483647次?(size_t )相关的知识,希望对你有一定的参考价值。
背景
2147483647刚好是2^32/2-1,但是不知道为什么循环次数不能超过这个次数
代码:
#include <stdio.h>
int main()
while (1) // 一个死循环
//for(int i=0;i<2147483648;i++) //no
for(int i=0;i<2147483647;i++) //yes
printf("测试结束\\n");
原因
在我的ubuntu系统下,int取值范围是-2147483648~2147483647
int i = 2147483647 加一后确实变成了 -2147483648,所以上面的for(int i=0;i<2147483648;i++)
代码将会进入永无止境的循环中。。。。
(看看 int i =2147483647 加一是多少)
#include <stdio.h>
int main()
int i =2147483647;
printf("%d\\n", ++i);
ubuntu上编译运行结果:
[yg@ubuntu /arnold_test/20220113_TEST_signal]110$ ./a.out
-2147483648
解决办法
解决办法就是将 int 改成 size_t,size_t 范围大且不会是负数
以上是关于为什么ubuntu64位下C语言for循环不能超过2147483647次?(size_t )的主要内容,如果未能解决你的问题,请参考以下文章
关于Ubuntu 12.04 64位下的libpcre.so.0
Alter Table 在 MS Access 64 位下不起作用。为啥?
PHP for循环中怎么让字符串超过固定特定长度后自动换行?