[置顶] 都是类型惹的祸——小心unsigned
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int a = -1;
- unsigned int b = 1;
- if(a > b)
- printf("a > b, a = %d, b = %u\n", a, b);
- else
- printf("a <= b, a = %d, b = %u\n", a, b);
- exit(0);
- }

- #include <stdio.h>
- #include <stdlib.h>
- void show_bytes(unsigned char *start, int len)
- {
- int i = 0;
- for(; i < len; ++i)
- printf(" %.2x", start[i]);
- printf("\n");
- }
- int main()
- {
- int a = -1;
- unsigned int b = 4294967295;
- printf("a = %d, a = %u\n", a, a);
- printf("b = %d, b = %u\n", b, b);
- show_bytes((unsigned char*)&a, sizeof(int));
- show_bytes((unsigned char*)&b, sizeof(unsigned int));
- exit(0);
- }

- float sum_elements(float a[], unsigned length)
- {
- int i = 0;
- float sum = 0;
- for(i = 0; i <= length -1; ++i)
//有bug - sum += a[i];
- return sum;
- }
= -1),-1对应的无符号类型的值为UMax,所以for循环将会循环UMax次,数组也会越界,发生错误。那么如何优化上面的代码呢?其实答案非常简单,你也可以自己想一想,这里就给出答案吧,就是把for循环改为:
- for(i = 0; i < length; ++i)
- int strlonger(char *s1, char *s2)
- {
- return strlen(s1) - strlen(s2) > 0; //有bug
- }
- size_t strlen(const char *s);
== strlen(s2)时返回假,其他情况都返回真。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int strlonger(char *s1, char *s2)
- {
- return strlen(s1) - strlen(s2) > 0;
- }
- int main()
- {
- char s1[] = "abc";
- char s2[] = "cd";
- if(strlonger(s1, s2))
- printf("s1 is longer than s2, s1 = %s, s2 = %s\n", s1, s2);
- else
- printf("s1 is shorter than s2, s1 = %s, s2 = %s\n", s1, s2);
- if(strlonger(s2, s1))
- printf("s2 is longer than s1, s2 = %s, s1 = %s\n", s2, s1);
- else
- printf("s2 is shorter than s1, s2 = %s, s1 = %s\n", s2, s1);
- }

- int strlonger(char *s1, char *s2)
- {
- return strlen(s1) > strlen(s2);
- }
[置顶] 都是类型惹的祸——小心unsigned的更多相关文章
- 都是类型惹的祸——小心unsigned
正如我们所知道的,编程语句都有很多的基本数据类型,如char,inf,float等等,而在C和C++中还有一个特殊的类型就是无符号数,它由unsigned修饰,如unsigned int等.大家有没想 ...
- ie8 background css没有显示?——都是空格惹的祸
ie8 background css没有显示?——都是空格惹的祸
- 都是SCI惹的祸?
都是SCI惹的祸? 过去只知道地质学家需要跋山涉水寻找宝藏,最近同一位海外归来的学者谈起,方知少数其它领域的科研人员,也"跋山涉水",在内地研究机构寻找可以写好文章的研究成果,不管 ...
- 都是iconv惹的祸
今天在做采集的时候发现只取到了网页的部分内容,当时我就郁闷了,之前都用的采集都可以采集到网页的所有内容,但这次死活就取到部分内容.寻找原因才知道原来是iconv惹的祸. 发现问题时,网上搜了搜,才发现 ...
- mysql分页查询按某类型置顶 按某类型置尾 再按优先级排序
近段时间接到一个新需求: 第一优先级:未满的标的顺位高于已满标的顺位.第二优先级:新手标的顺位高于其他标的的顺位. 第三优先级:标的剩余可投金额少的顺位高于标的剩余可投金额多的. 我是直接通过sql语 ...
- Dubbo 高危漏洞!原来都是反序列化惹得祸
前言 这周收到外部合作同事推送的一篇文章,[漏洞通告]Apache Dubbo Provider默认反序列化远程代码执行漏洞(CVE-2020-1948)通告. 按照文章披露的漏洞影响范围,可以说是当 ...
- [置顶] Redis String类型数据常用的16条命令总结
Redis String类型数据常用的16条命令总结 描述:String 类型是最简单的类型,一个Key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比 ...
- [置顶]
kubernetes资源类型--ingress
Ingress在K8S1.1之前还没有. 概念 Ingress是一种HTTP方式的路由转发机制,为K8S服务配置HTTP负载均衡器,通常会将服务暴露给K8S群集外的客户端. Ingress是一个允许入 ...
- [置顶]
kubernetes资源类型--PetSets/StatefulSet
PetSet首次在K8S1.4版本中,在1.5更名为StatefulSet.除了改了名字之外,这一API对象并没有太大变化. 注意:以下内容的验证环境为CentOS7.K8S版本1.5.2,并部署Sk ...
随机推荐
- iBatis的Settings节点参数详解[转]
(1) cacheModelsEnabled: 是否启用SqlMapClient上的缓存机制.建议设为"true".默认值为“true”. (2) enhancementEnabl ...
- struts2中常用配置
1.Post提交乱码问题,如果编码采用的是utf-8,那么默认不需要自己处理,因为其默认的常量配置文件就是处理UTF-8的 这个常量值只处理POST提交,get如果乱码还得自己写拦截器处理,一般只要页 ...
- spark总结3
cd 到hadoop中 然后格式化 进入到 bin下 找到 hdfs 然后看看里面有哈参数: ./hdfs namenode -format 格式化 然后启动 sbin/start-d ...
- linux jdk安装。
我使用的centos 7: 安转sun公司的jdk要先检查系统中是否安装jdk,一般来说Centos系统会默认会安装OpenJDK,但是openJDK部分内容 与SUN JDK不兼容,因此下面进行重新 ...
- 简单的文件上传的下载(动态web项目)
1.在页面中定义一个form表单,如下: <!-- 文件上传 --> <form action="${pageContext.request.contextPath}/Fi ...
- 中文乱码问题(页面乱码,eclipse乱码,请求响应乱码)
1.首先在开发工具eclipse中设置工作空间和文件编码格式,详情参见 http://www.cnblogs.com/lixiang1993/p/7345161.html 2.在eclipse的安 ...
- 闲聊SEO
SEO 1. SEO 搜索引擎优化 免费(Baidu,Google) SEM 搜索引擎营销 收费 2. IP 独立IP访问的用户 PV 页面的点击量 UV 独立访客数 3. 搜索引擎蜘蛛 权重 去让搜 ...
- PHP的目录路径问题
在windows下,可以用“/”或者“\”来表示目录层次,而linux下只能用“/”:同时在linux下没有盘符的概念,只有用“/”符号表示唯一的根目录.所以,用一个变量表示目录位置的话,用“/”最安 ...
- C语言基础三
C--数组 一维数组的定义和引用 定义:类型说明符 数组名[常量表达式] int a[ 10 ];他表示定义了一个整形数组,数组名为a,有10个元素. 注意:C语言不允许对数组的大小做动态定义. 一维 ...
- hzau 1208 Color Circle(dfs)
1208: Color Circle Time Limit: 1 Sec Memory Limit: 1280 MBSubmit: 289 Solved: 85[Submit][Status][W ...