今天写了一个类似这样的程序:

#include <stdio.h>
#include <string.h>
int main()
{int i = -1;if(i > strlen("Demon"))printf("Hello World");elseprintf("Hello Demon");return 0;
}

输出的竟然是Hello World!-1 > 5?!

仔细想想,原来问题出在strlen上,strlen返回的类型是size_t,size_t的定义为:

typedef unsigned int size_t;

即无符号的整型,而i的类型是int,即有符号的整型。当有符号整型和无符号整型进行运算时,有符号整型会先自动转化成无符号。-1转化成无符号数为4294967295,远远大于5。

今后遇到有符号数和无符号数之间的运算时要千万小心。

C语言中size_t的陷阱相关推荐

  1. C语言中size_t类型详细说明【转载】

    在c语言的很多库函数中,函数原型中,参数类型都是size_t.但是在我们编写程序时size_t类型却很少有所使用.那么这个类型到底有什么作用呢 使用size_t可能会提高代码的可移植性.有效性或者可读 ...

  2. c语言中inline用法,C语言陷阱与技巧第2节,使用inline函数可以提升程序效率,但是让inline函数生效是有条件的...

    打开 Linux 内核源代码,会发现内核在定义C语言函数时,有很多都带有 "inline"关键字,请看下图,那么这个关键字有什么作用呢? inline 关键字的作用 在C语言程序开 ...

  3. sizeof 在C语言的作用,C语言中的sizeof的用法详解

    C语言中的sizeof的用法详解 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操 ...

  4. C 语言中 void* 详解及应用介绍

    void 在英文中作为名词的解释为 "空虚.空间.空隙",而在 C 语言中,void 被翻译为"无类型",相应的void * 为"无类型指针" ...

  5. c语言中 char怎样用,C语言中char*和char[]用法区别分析

    C语言中char*和char[]用法区别分析 本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很 ...

  6. C语言中sizeof与strlen的区别总结!

    C语言中sizeof与strlen区别总结! 先上一个例子: 结果: 一.sizeof与strlen char c[] = "abc\0cba"; 问题1:sizeof(c) = ...

  7. C语言中 void* 详解及应用

    void在英文中作为名词的解释为"空虚:空间:空隙":而在C语言中,void被翻译为"无类型",相应的void *为"无类型指针".void ...

  8. 在C 语言中,请一定记得初始化局部变量!

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! C语言中,未初始化的局部变量到底是多少? 答案往往是: 与编译器有关. 可能但不保证 ...

  9. c语言memcopy_C语言中memcpy 函数的用法详解

    C语言中memcpy 函数的用法详解 memcpy(内存拷贝函数) c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址 ...

最新文章

  1. 电脑用久了,学会这几招增加十年寿命,清除电脑里的垃圾方法与流氓软件工具
  2. 从严把控_精准把控 推动从严治党走深走实
  3. 第十六课.基于K-means的图像分割
  4. php 记事本源代码_php实现记事本案例
  5. C/C++中退出线程的四种解决方法
  6. jar打包 剔除第三方依赖以及它的依赖_为什么Spring Boot的 jar 可以直接运行?
  7. java 省市区三级联动_AJAX省市区三级联动下拉菜单(java版)
  8. mysql新建用户只能查看试图_Sql Server:创建用户并指定该用户只能看指定的视图,除此之外的都不让查看。...
  9. MATLAB读取二进制格式的三维数据体
  10. Wine 0.9.37
  11. Win7环境下,用VHD安装Win8,实现双系统!
  12. 让我来告诉你:大学计算机专业的学生应该去考什么证书.
  13. BES2300x笔记(30) -- ANC降噪原理与通道配置
  14. 用分数表示循环小数(C#版)
  15. 计算机管理系统在哪里,图文详解win10设备管理器在哪打开
  16. 【Python可视化展示】-多维数据可视化分析
  17. Android 操作系统简介
  18. abaqus如何并行计算_如何修改abaqus并行计算的默认设置
  19. RBA验厂辅导,RBA VAP认证最终的评分是要通过给予的权重进行计算的
  20. 前端性能优化之渲染优化

热门文章

  1. jsonpath的用法
  2. 【转载】SVD在推荐系统中的应用
  3. 从零学React Native之07View
  4. Android组件之Service
  5. Order附近语法错误
  6. 吴恩达 coursera ML 第九课总结+作业答案
  7. Python学习笔记:常用内建模块1
  8. Python学习笔记:错误,测试,调试(起)
  9. 图解linux下top命令的使用
  10. 基于VTK的MFC应用程序开发(3)