假设我们有一些函数,并且想验证参数。例如,对于不是NULL:C函数参数的低级验证
void* myFunction(char* str1, char* str2){
if(str1==NULL || str2==NULL) return NULL;
...
}
我的问题是什么,它被称为良好的低级别(API)来验证就像是用标准C库做。
谢谢。
假设我们有一些函数,并且想验证参数。例如,对于不是NULL:C函数参数的低级验证
void* myFunction(char* str1, char* str2){
if(str1==NULL || str2==NULL) return NULL;
...
}
我的问题是什么,它被称为良好的低级别(API)来验证就像是用标准C库做。
谢谢。
C是一个你问的是什么你得到的语言有很多绳子挂自己和很少的安全网。举个例子this implementation of strcpy从苹果公司,但他们都看上去很相像:
char *strcpy(char *s1, const char *s2)
{
char *s = s1;
while ((*s++ = *s2++) != 0)
;
return (s1);
}
由于C不知道异常的概念,所有的错误信号,必须通过通过功能有时的返回值进行全局变量errno,这当然在某种程度上限制了错误的表达性。
因此,如果你想保持标准库的功能,就不需要提供很少的安全性。
关键是要“做你说的话”和“说出你的所作所为”。 “你说什么”需要清楚描述。描述应该在文档中,但也可以在注释或函数名称或参数名称中。
说明了这个要求后,确定你确实满足了这个要求。如果您定义错误情况进行陷阱,请确保调用方可以使用errno
或其他方式确定此情况。
C标准库不保证验证参数。 'strcpy(NULL,“abc”);'可能会崩溃。这可以。 –
为什么不能assert()? – Mawg