【发布时间】:2021-12-28 17:27:15
【问题描述】:
我正在尝试将 char[100] (nodo->fname) 与 C 中的 char* (name) 进行比较,当比较两者时,我在 strcmp 函数中遇到了分段错误:
struct mmap_info{
char fname[100];
}
pos search_mmap(list *l, char *name){
for(pos p = first(*l); !end(*l, p); p = next(*l, p)){
struct mmap_info *nodo = get(*l, p);
if(strcmp(nodo->fname, name) == 0){
return p;
}
}
return NULL;
}
(其他部分代码中已经有malloc() nodo)
这是我应该比较它们的方式吗?如果不是我该怎么办?谢谢!
【问题讨论】:
-
什么是
list,什么是pos? -
这里缺少很多东西。使用调试器逐步完成它。为
NULL添加一些检查。创建一个minimal reproducible example。 -
nodo->fname将自动转换为char*。比较应该没问题 -
所以问题一定是
nodo或者name无效。 -
如果您在
strcmp中遇到分段错误,那么最可能的原因是两个函数参数中的至少一个未指向有效的以空值结尾的字符串。由于您没有向我们展示他们所指的内容,因此我们无法告诉您出了什么问题。我建议您使用debugger 检查这些指针指向的内存内容。如果问题仍然存在,请提供问题的minimal reproducible example,或者,如果您无法提供,请至少提供额外的调试信息。