c - 在输入验证中使用 __typeof__

标签 c linux programming-languages typeof

我们可以在 Linux 平台上运行的 C 程序中使用 __typeof__ 进行输入验证吗?如何?

如果我们不能,那么除了正则表达式之外还有其他方法可以达到同样的目的吗?

最佳答案

“typeof”纯粹是一个编译时指令。它不能用于“输入验证”。

输入验证规则可能很复杂。在 C 中,由于标准 C 库中可供您使用的工具非常糟糕,因此它们变得更加复杂。一个例子是 atoi(),如果你传入的字符串开头不包含数字(atoi("hello world") == 0),它会返回 0,而“1337isanumber”实际上会返回 1337。只需验证某物是否是数字,您就可以(假设是 ASCII 而不是 Unicode)使用循环并确保每个值直到第一个空终止符(或您为字符串分配的内存大小)之前每个数字实际上是数字。可以执行类似的过程来检查某些内容是否为字母数字等。正如您提到的,正则表达式可用于电话号码或其他一些相对复杂的数据格式。

您在下面的评论中提到在 Java 中使用“instanceof”进行输入验证,但这也是不可能的。如果您从命令行或查询字符串参数或其他任何地方获得用户输入,它实际上是以字符串形式出现的。如果您使用 Scanner 对象扫描标准输入并使用诸如 nextInt() 之类的方法,它实际上是将字符串(来自流)转换为某种东西,这可能会引发运行时异常。您不能使用 instanceof 来确定字符串的内容;一个字符串是一个字符串——即使它的内容是“42”,它也不是一个整数的实例!

关于c - 在输入验证中使用 __typeof__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460609/

相关文章:

c - 将 malloc 初始化为零,而不是使用 calloc

c - 如何通过引用传递动态分配的二维数组中的子数组?

c++ - 在 Windows 上编写 C++,但通过 Linux 模拟器使用 Linux 系统调用

linux - runit 的服务重新启动如何立即返回?

java - 为java创建词法分析器

c# - C# 和 .NET 有多大区别?

c - lapack dgels_ 段错误 11

linux - 如何防止禁用的 AD 用户登录拥有其公钥的 Linux 服务器?

ide - 适用于 Windows 或 Linux 或 Mac 的 ML IDE 和编译器

c - 翻转计数器跳过零