免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 〇〇
打印 上一主题 下一主题

[C] 品悟C的问题 [复制链接]

论坛徽章:
0
91 [报告]
发表于 2012-09-27 14:59 |只看该作者
回复 87# pmerofc


    我感觉,这类函数的使用,都应该配合setlocale函数用的,但是在一般这些小的程序里,
貌似也没什么大的问题,因为C语言规定了在程序启动的时候setlocale(LC_ALL, "C")会被
执行。我只是觉得,这些函数使用的时候需要谨慎,不过我没接触过其他的那些locale环境
不知道还有哪些locale-specific的字符会对他们产生影响。而且这些程序的实现都非常简单,
按照自己的意思,实现不麻烦。如果非要使用,最好还是在弄清特定locale对他们影响的前
提下,配合setlocale函数使用吧。

论坛徽章:
0
92 [报告]
发表于 2012-09-27 15:09 |只看该作者
回复 89# hellioncu


    也许你是对的,但是我是在弄不清locale对他们的影响。我最开始注意到这个东西的时候,还是在看toupper的manpage的BUGS一节

BUGS
       The  details  of  what constitutes an uppercase or lowercase letter depend on the current locale.  For example, the default "C" locale does
       not know about umlauts, so no conversion is done for them.

       In some non-English locales, there are lowercase letters with no corresponding uppercase equivalent; the German sharp s is one example.

   所以,我感觉上,有些东西,在弄不清到底怎么回事的情况下,自己实现,也许更保险一些,起码能保证正确性。

当然,我的前提是在弄不清locale的影响的前提下的。如果能弄清楚,当然是提倡使用的。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
93 [报告]
发表于 2012-09-27 15:14 |只看该作者
madoldman 发表于 2012-09-27 15:09
回复 89# hellioncu


库函数经过很多高水平人的修改,又经过大量的实际使用,你有什么理由需要自己来实现?

论坛徽章:
0
94 [报告]
发表于 2012-09-27 15:36 |只看该作者
回复 93# hellioncu


    理由很简单啊,locale会对这些函数产生影响,需要使用setlocale,而使用setlocale并调用这些函数,并不是线程安全的
在自己能够有很简单的方式可以处理,又能够保证正确的情况下,为什么不这么做呢?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
95 [报告]
发表于 2012-09-27 15:40 |只看该作者
madoldman 发表于 2012-09-27 15:36
回复 93# hellioncu


一般来说,输入的字符总是跟你当前locale对应的吧。
退一步讲,那么多不同的locale,你自己写的时候怎么判断,难道不用考虑locale?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
96 [报告]
发表于 2012-09-27 15:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
97 [报告]
发表于 2012-09-27 16:01 |只看该作者
pmerofc 发表于 2012-09-27 15:58
我觉得你的观点不能说没有道理
但是并不是普遍适用
我主张在学习一种语言的时候少用库函数


按照你以前的看法,平时这么做形成的习惯,会带到实际工作中去的。

论坛徽章:
0
98 [报告]
发表于 2012-09-27 16:04 |只看该作者
第11章 问题37 352页
  1. int I;
复制代码
变量i大写了。

论坛徽章:
0
99 [报告]
发表于 2012-09-27 16:13 |只看该作者
回复 95# hellioncu

    也许我遇到过的问题的局限性吧,我需要处理的基本是英文字符。但是我不能保证locale被设置成了什么。
    而且,我也不能保证locale被改后,在处理英文字符时,会不会产生影响。
    例如还是toupper函数,在需要处理英文字符时,如果locale被设置成了其他的东西你怎么办?
    是先setlocale回"C"用toupper?还是自己写一个函数处理?特别是在多线程的环境下。
   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
100 [报告]
发表于 2012-09-27 16:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP