C函数参数的低级验证
假设我们有一些函数,我们想验证参数。例如,不为空:C函数参数的低级验证,c,low-level-api,C,Low Level Api,假设我们有一些函数,我们想验证参数。例如,不为空: void* myFunction(char* str1, char* str2){ if(str1==NULL || str2==NULL) return NULL; ... } 我的问题是,它被称为良好的低级(API)验证,就像标准C库所做的一样 谢谢。C是一种“你问什么就是你得到什么”的语言,有很多绳子用来吊死自己,只有很少的安全网。以苹果为例,但它们看起来非常相似: char *strcpy(char *s1, cons
void* myFunction(char* str1, char* str2){
if(str1==NULL || str2==NULL) return NULL;
...
}
我的问题是,它被称为良好的低级(API)验证,就像标准C库所做的一样
谢谢。C是一种“你问什么就是你得到什么”的语言,有很多绳子用来吊死自己,只有很少的安全网。以苹果为例,但它们看起来非常相似:
char *strcpy(char *s1, const char *s2)
{
char *s = s1;
while ((*s++ = *s2++) != 0)
;
return (s1);
}
由于C不知道异常的概念,所有的错误信号都必须通过函数的返回值,有时通过全局变量errno来完成,这当然在一定程度上限制了错误的表达能力
因此,如果您想与标准库保持一致,那么只需要提供很少的安全性 关键是“言行一致”和“言行一致”。“你说什么”需要清楚地描述。说明应该在文档中,但也可以在注释或函数名或参数名中
说明了要求后,请确保您满足该要求。如果定义了要捕获的错误案例,请确保调用方可以使用
errno
或其他方法确定此错误。不保证C标准库验证参数<代码>strcpy(空,“abc”)代码>可能会崩溃。这很好。据我所知,在您的示例中,null的验证是作为功能本身实现的一部分进行的。@Sanich确实,调用函数的代码本身负责它发送的参数的正确性。库函数假定它接收的值可用。