我有一个我无法处理的问题,所以我想也许你可以帮助我。基本上我有一个函数接收char *作为参数并做一些东西(我检查了那些步骤/函数,它们工作得很好)。如果函数中给出的char *是“”(我猜是NULL) ),我收到断言与断言。 这是代码:
char *computeRNA(char *s)
{
if (s != NULL && s!= "")
{
Lista* l = to_list(s);
int i;
l = l->next;
for(i = 0; i<= lungime(l); ++i)
{
if(l->info == 'T')
l->info = 'U';
l = l->next;
}
char *rna = to_pointer(l);
return rna;
}
return NULL;
}
以下是断言:
char *s;
s = computeRNA("");
ASSERT(!strcmp(s, ""), "computeRNA-01");
free(s);
这是学校的作业,所以我不能改变断言的代码,只能改变功能。提前致谢!
答案 0 :(得分:0)
您不能将NULL指针作为参数传递给strcmp()
。在ASSERT
语句之前,只需检查s
的非NULL值。像
if (s) {
ASSERT(!strcmp(s, ""), "computeRNA-01");
}
应该做的。
编辑:
如果使用更改函数,断言也是不可能的,您可以修改computeRNA()
函数以返回空字符串,而不是NULL,如
char * empty_string = calloc(1,1);
return empty_string;
以后可以传递给来电者的free()
。
答案 1 :(得分:0)
这个ASSERT
你不应该改变,测试如果给computeRNA
一个空字符串,它也应该返回一个空字符串:
s = computeRNA("");
ASSERT(!strcmp(s, ""), "computeRNA-01");
您的代码返回空指针。另外,需要使用strcmp
来比较字符串,s == ""
只会比较在这里不会使用的指针值。
因此我用
开始这个功能// null pointer was given
if (!s) {
return calloc(1, 1);
}
// an empty string was given (the first character pointed to b s is the string terminator.)
// to compare explicitly, you need to do `strcmp(s, "")` == 0. `s == ""` is wrong.
if (!*s) {
return "";
}