C函数参数的低级验证

时间:2012-12-06 01:30:14

标签: c low-level-api

假设我们有一些功能,我们想要验证参数。例如,不是NULL:

void* myFunction(char* str1, char* str2){
    if(str1==NULL || str2==NULL) return NULL;
    ...
}

我的问题是它被称为良好的低级(API)验证,就像标准C库所做的那样。

感谢。

2 个答案:

答案 0 :(得分:1)

C是你所问的是你得到的语言有很多绳索可以挂起自己和很少的安全网。以Apple的this implementation of strcpy为例,但它们看起来非常相似:

char *strcpy(char *s1, const char *s2)
{
    char *s = s1;
    while ((*s++ = *s2++) != 0)
    ;
    return (s1);
}

由于C不知道异常的概念,所有错误信号必须通过函数的返回值完成,有时通过全局变量errno来完成,这当然在某种程度上限制了错误的表达性。

因此,如果您想与标准库保持一致,则需要提供很少的安全性。

答案 1 :(得分:0)

关键是要“做你说的话”和“说出你做的事”。 “你所说的”需要清楚地描述。描述应该在文档中,但也可以在注释或函数名称或参数名称中。

说明要求后,请确保您满足该要求。如果您定义要捕获的错误情况,请确保调用者可以使用errno或其他方式确定此情况。