Arrays 有没有办法检查指针是否有错误值?
因此,我和这里的人得出结论,变量可能包含错误值,我被要求发布代码的其余部分,但是我的问题不是如何修复代码(不管怎样,它是非常无害的),而是我是否可以检查错误值是否为空(如果c中有这样的东西) 这永远不会发生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
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));
}