gpt4 book ai didi

c - 如何对 char 类型进行安全算术

转载 作者:行者123 更新时间:2023-11-30 16:37:09 25 4
gpt4 key购买 nike

在普通 C 语言中,char 类型是至少 8 位宽的类型,具有实现定义的符号。

作为When to use the plain char type in C问题的答案表明,当您有一个有意为字符串且行为类似于普通 C 字符串的数据类型时,应使用此类型,允许使用标准库中的例如 string.h 函数。

但是,在某些情况下,您可能需要对这些值进行算术运算。例如 UTF-8 数据,您必须自己编写某种类型的处理器或显示例程(您的目标上没有可用的适当的库解决方案)。

如何以最安全、最便携的方式处理这种情况?

最佳答案

对字符值进行操作的一种基本上安全的方法可能是使用 unsigned char 类型并立即将它们转换为表达式中的 unsigned (例如,编写 (无符号)a - (无符号)b 而不是 a-b)。

如果在算术表达式中使用字符类型,即使是 unsigned char,它也会被提升为 int1,并且算术与int 值在 C 中未完全指定(特别是,溢出时的行为未定义)。立即将每个对象转换为 unsigned 将有效地避免这种情况,从而对无符号值进行算术,这是更完整的定义。

这不是一个完美的解决方案。这将导致代码繁琐,并带有大量 (unsigned) 转换。当然,定义了行为并不意味着您总是会得到想要的行为——人们仍然可以编写在不需要时换行(而不是溢出)的表达式。没有办法消除所有人为错误。

脚注

1 根据其他地方的讨论,在深奥的 C 实现中,charint 可能具有相同的大小,其中case unsigned char 将提升为 unsigned int。出于所有实际目的,您可以忽略这一点。

关于c - 如何对 char 类型进行安全算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48096735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com