网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月21日
漏签
0
天
c语言吧
关注:
798,931
贴子:
4,351,386
看贴
图片
吧主推荐
视频
游戏
33
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
isdigit()意义何在
只看楼主
收藏
回复
冰
超能力者
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我传一个char=-30进去,居然不返回false,给我来个assert弹窗码,告诉我
Expression: c >= -1 && c <= 255
你意思我还要判断之前先排除无效范围,那这个函数还有什么意义,还不如自己实现一个
我就不明白为什么要这样坑人设计??
遂逸
帕秋莉糕
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
char c=-30; 未定义行为。
Kolkas
帕秋莉糕
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你度又出什么bug了,发出来是同一段话一直重复
前面忘了中间忘了,总之-1是EOF,0到255是unsigned char,参数超出这个范围是未定义行为,对于ctype中所有字符判断函数都是如此。vs开debug模式时会断言失败,release模式下可以正常运行,但这个参数超出范围一般也就意味着要检查其他地方的逻辑了,并不在ctype可以处理的范围内,设计蛮合理的。
XeO2
马猴烧酒
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
在抱怨标准库函数之前不妨先思考一下是不是自己的问题,isdigit(c)这种问题写法是要接受C Secure Coding Rules(N 1624)的拷打的,正确的写法是isdigit((unsigned char)c)。
其次,所有函数都是有适用范围的,为什么要给用户不负责任的行为兜底?菜刀会切到自己,鸡蛋放微波炉会炸,难道是它们的设计都有问题?
witness-
团子家族
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
米哈游,破案
GTA小鸡
吧主
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
ctype.h中的函数/宏函数是判断字符的,你传不是字符的值进入,被debug assert当然很正常
qishipai
大能力者
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
-fsigned-char受害者
aikogrgushdhka
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
谁教你给char赋值-30的???不想写可以不写,请你别乱写
蛋白喲
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
汉字编码把
可以吧
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
求助,它是怎么换算的0x15A成70
qishipai
大能力者
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
由于C标准没有限制char类型有无符号,char a = -30; printf("%d", a); 在不同的编译器或平台上将可能有不同的结果。如果你不确定符号拓展是否会影响你的算法,请明确使用signed char还是unsigned char或在编译时使用-fsigned-char或-fno-signed-char强制指明char的符号属性。很不幸,ctype系列函数的参数类型是int,而且有些C库内部使用bitmap实现,使它们从原理上不能很好地支持负数的处理。由于你使用signed char,你把226解析成了-30,这是你的锅,如果让ctype背锅在里面写负数的判断就等于说为了你还要让那些正常使用unsigned char的人拥有更慢的运行体验,这肯定是不行的。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示