【问题标题】:Does ctype.h still require unsigned char?ctype.h 是否仍然需要无符号字符?
【发布时间】:2013-07-31 16:29:19
【问题描述】:

传统上,严格来说,将 signed char 传递给 ctype.h 谓词是错误的,因为它们仅定义为 -1 到 255,因此 -128 到 -2 最终可能会读取数组边界之外的值.

这个问题是否已修复,或者严格来说,您仍然必须使用 unsigned char 来避免现代 C 版本中未定义的行为?

【问题讨论】:

  • 现代程序遇到 128-255 范围内的字符的机会只会越来越多,如果将其视为有符号字符,则会被误解为否定字符,因此答案是“比以往任何时候都多”。跨度>

标签: c undefined-behavior c11 ctype


【解决方案1】:

严格来说,您仍然必须使用 unsigned char 来避免现代 C 版本中的未定义行为吗?

是的,来自C11 draft standard 部分7.4 字符处理 段落1 说(强调我的):

标头声明了几个对分类和映射有用的函数 characters.198) 在所有情况下,参数都是一个 int,其值 应为 可表示为无符号字符或应等于宏 EOF 的值。如果 参数有任何其他值,行为未定义

这也适用于draft C99 standard,您可以在同一部分找到它。

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2011-10-02
    • 2010-10-21
    • 2011-03-03
    • 2023-03-19
    相关资源
    最近更新 更多