Arrays 有没有办法检查指针是否有错误值?

Arrays 有没有办法检查指针是否有错误值?,arrays,c,if-statement,pointers,null,Arrays,C,If Statement,Pointers,Null,因此,我和这里的人得出结论,变量可能包含错误值,我被要求发布代码的其余部分,但是我的问题不是如何修复代码(不管怎样,它是非常无害的),而是我是否可以检查错误值是否为空(如果c中有这样的东西) 这永远不会发生 if(s==NULL) printf("Not found"); 然而,如果要返回NULL,则会使控制台崩溃 strlen(s) 这是密码 typedef struct PERSON { char name[25]; char surname[36

因此,我和这里的人得出结论,变量可能包含错误值,我被要求发布代码的其余部分,但是我的问题不是如何修复代码(不管怎样,它是非常无害的),而是我是否可以检查错误值是否为空(如果c中有这样的东西)

这永远不会发生

 if(s==NULL) printf("Not found");
然而,如果要返回NULL,则会使控制台崩溃

 strlen(s)
这是密码

typedef struct PERSON {
    char name[25];
    char surname[36];
    char rnum[11];
    char adress[50];
} PERSON;

int compare2(const void* kl, const void* oso) {
    PERSON* par = (PERSON*)oso;
    char key1[60];
    strncpy_s(key1, 35, par->surname, 35);
    strncat_s(key1, 24, par->name, 24);
    return strcmp((const char*)kl, (const char*)key1);
}



   char* search(const char* jm, const char* pr) {
        char key[60];
        PERSON* pom;
        strncpy_s(key, 60, pr, 35);
        strncat_s(key, 60, jm, 24);
        pom = (PERSON*)bsearch(key, registr, countPerson, sizeof(PERSON), compare2);
        return pom->rnum;
为了向每个人清楚地展示解决方案,下面就是它

  char* search(const char* jm, const char* pr) {
        char key[60];
        PERSON* pom;
        strncpy_s(key, 60, pr, 35);
        strncat_s(key, 60, jm, 24);
        pom = (PERSON*)bsearch(key, registr, countPerson, sizeof(PERSON), compare2);
if (!pom)
        return NULL;
    else
return pom->rnum;
我正在写一个代码可读性的答案

事实上,
s!=空值
意义不大。
s
可能有错误的值,be
!=空值
,仍然会导致崩溃。

我试图写一些东西来帮助OP提供一个最小的可重复性示例,但这段代码并不适用

#include <stdio.h>
#include <string.h>

typedef struct PERSON {
    char name[60];
    char surname[60];
    char rnum[60];
    char adress[60];
} PERSON;

int compare2(const void* kl, const void* oso) {
    PERSON *par = (PERSON*)oso;
    PERSON *key = (PERSON*)kl;
    int cmp;

    cmp = strcmp(par->surname, key->surname);
    if (cmp)
        return cmp;
    else
        return strcmp(par->name, key->name);
}

char *search(const char* jm, const char* pr) {
    PERSON key;
    PERSON *pom;
    strncpy_s(key.surname, 60, pr, 35);
    strncpy_s(key.name, 60, jm, 24);
    pom = (PERSON*)bsearch(&key, registr, countPerson, sizeof(PERSON), compare2);
    if (!pom)
        return NULL;
    return pom->rnum;
}

int main()
{
    char *arr1[2] = { "arr1[0]", "arr1[1]" };
    char *arr2[2] = { "arr1[0]", "arr1[1]" };
    char *str = search(arr1[0], arr2[0]);
    
    if (str == NULL)
        printf("Not found\n");
    else
        printf("strlen(%s): %lu\n", str, strlen(str));
}
#包括
#包括
typedef结构人{
字符名[60];
查氏[60];
charrnum[60];
字符地址[60];
}人;
整数比较2(常数无效*kl,常数无效*oso){
人员*par=(人员*)oso;
个人*钥匙=(个人*)kl;
int-cmp;
cmp=strcmp(par->姓氏,键->姓氏);
如果(cmp)
返回cmp;
其他的
返回strcmp(par->name,key->name);
}
字符*搜索(常量字符*jm,常量字符*pr){
人员密钥;
个人*pom;
斯特恩皮尤斯(钥匙。姓氏,60岁,公共关系部,35岁);
strncpy_s(key.name,60,jm,24);
pom=(PERSON*)b搜索(&key,registr,countPerson,sizeof(PERSON),compare2);
如果(!pom)
返回NULL;
返回pom->rnum;
}
int main()
{
char*arr1[2]={“arr1[0],“arr1[1]”};
char*arr2[2]={“arr1[0]”,“arr1[1]”;
char*str=search(arr1[0],arr2[0]);
如果(str==NULL)
printf(“未找到”);
其他的
printf(“strlen(%s):%lu\n”,str,strlen(str));
}

显示完整的代码。当s为空时,您是否调用
strlen
?@williampersell我使用strlen,即使经过空检查,它仍然崩溃是的,如果
s==NULL
而您调用
strlen
,您将得到一个错误。这是意料之中的。请允许我重复我自己的话:嘿,有没有一种方法可以像检查空值一样检查错误值@我所知道的不是杰克·利尔。我的意思是指针的值只是一个地址,如果它是
!=NULL
并且类型正确,这取决于编程人员您的问题还不错,但是如果您不发布
search()
函数的代码,就很难帮助您好吧,我添加了请求的搜索函数@Jack Lilhammers
#include <stdio.h>
#include <string.h>

typedef struct PERSON {
    char name[60];
    char surname[60];
    char rnum[60];
    char adress[60];
} PERSON;

int compare2(const void* kl, const void* oso) {
    PERSON *par = (PERSON*)oso;
    PERSON *key = (PERSON*)kl;
    int cmp;

    cmp = strcmp(par->surname, key->surname);
    if (cmp)
        return cmp;
    else
        return strcmp(par->name, key->name);
}

char *search(const char* jm, const char* pr) {
    PERSON key;
    PERSON *pom;
    strncpy_s(key.surname, 60, pr, 35);
    strncpy_s(key.name, 60, jm, 24);
    pom = (PERSON*)bsearch(&key, registr, countPerson, sizeof(PERSON), compare2);
    if (!pom)
        return NULL;
    return pom->rnum;
}

int main()
{
    char *arr1[2] = { "arr1[0]", "arr1[1]" };
    char *arr2[2] = { "arr1[0]", "arr1[1]" };
    char *str = search(arr1[0], arr2[0]);
    
    if (str == NULL)
        printf("Not found\n");
    else
        printf("strlen(%s): %lu\n", str, strlen(str));
}