gpt4 book ai didi

c - 断言 - 段错误

转载 作者:行者123 更新时间:2023-11-30 19:40:00 28 4
gpt4 key购买 nike

我有一个无法处理的问题,所以我想也许你可以帮助我。基本上我有一个函数,它接收 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);

这是学校作业,所以我无法更改断言的代码,只能更改函数。提前致谢!

最佳答案

您不应该更改的这个 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 "";
}

关于c - 断言 - 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35933983/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com