Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C函数参数的低级验证_C_Low Level Api - Fatal编程技术网

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确实,调用函数的代码本身负责它发送的参数的正确性。库函数假定它接收的值可用。