我们可以在Linux平台上运行的C程序中使用__typeof__
进行输入验证吗?
如果我们不能,那么除了正则表达式之外还有其他方法可以实现同样的目标吗?
答案 0 :(得分:2)
“typeof”纯粹是一个编译时指令。它不能用于“输入验证”。
输入验证规则可能很复杂。在C语言中,由于您在标准C库中使用的工具非常糟糕,因此它们变得更加复杂。一个例子是atoi(),如果你传入的字符串在开头不包含数字(atoi(“hello world”)== 0),它将返回0,而“1337isanumber”实际上将返回1337。简单地验证某些东西是否为数字,你可以(假设ASCII而不是Unicode)使用循环并确保每个值直到第一个空终止符(或你为字符串分配的内存的大小),每个数字实际上是数字。可以采用类似的程序来检查某些内容是否为字母数字等。正如您所提到的,正则表达式可用于电话号码或其他一些相对复杂的数据格式。
下面的评论引用Java中的“instanceof”进行输入验证,但这也是不可能的。如果您从命令行或查询字符串参数或其他任何内容获得用户输入,它实际上是以字符串形式出现的。如果您正在使用Scanner对象扫描标准输入并使用诸如nextInt()之类的方法,那么它实际上是将字符串(从流)转换为某些内容,这可能会引发运行时异常。您不能使用instanceof来确定字符串的内容; String是一个String - 即使它的内容是“42”,它也不是Integer的实例!