c - 在C中操作列表列表
问题描述
所以我想操作另一个列表中的链表;这是结构
typedef struct liste_fav
{
signed char numf[20];
struct liste_fav *suiv;
}liste_fav;
/***********************************/
typedef struct abonnes
{
signed char num_c[20];
signed char operateur [20];
signed char profil[20];
int credit;
liste_fav liste;
struct abonnes *adr;
}abonnes;
问题是我有一个不起作用的过程,它编译但它每次返回null,它的功能是搜索指向指定数字(num)的指针, acces_num遍历列表,直到找到我们的数字搜索或直到 NULL ,在主程序中我会检查这个(如果 point==NULL 则找不到数字)
liste_fav *acces_num(abonnes *p, signed char *num)
{
liste_fav *point= &(p->liste);
while ((point != NULL) && (numero_fav(point)!=num ))
{
point= suivant_fav(point);
}
return(point);
}
numero_fav : 给出 liste_fav 的一个元素内的数字 suivant_fav : 给出下一个元素
signed char * numero_fav( liste_fav *p)
{
return (p ->numf);
}
liste_fav *suivant_fav(liste_fav *p)
{
return (p->suiv);
}
你能告诉我错误在哪里吗!!
解决方案
您的代码numero_fav(point)!=num
看起来像是在尝试比较整数,而不是字符串。num
和都是numero_fav()
字符指针,而不是整数。[我假设它们应该是表示 ascii 或类似数字的字符串)。因此,两个字符指针在功能上都是不同的内存部分,因此具有不同的指针值。
我认为您可能想要的是strncmp(numero_fav(point), num, 20) != 0
您的测试用例。
请注意,20
任何地方的硬编码也可能通过顶部的定义来完成:
#define NUM_SIZE 20
...
signed char numf[NUM_SIZE];
例如。而且您需要注意当有人试图向您传递一个长度超过 19 的数字字符串时会发生什么(您的代码没有显示数据的来源)。
推荐阅读
- mongodb - MongooseJs 使用 $in 或 Promise.all 查询?
- java - 为什么 Scala 构建自己的 ForkJoinPool 而不是使用 java.util.concurrent.ForkJoinPool#commonPool?
- jquery - jQuery getScript 加载外部脚本并调用依赖于脚本的函数不起作用
- java - JSON 到地图
每个原始数据类型的转换 - java - 当我输入 url 字段时,我收到错误“远程 URL 测试失败:不支持协议 'git clone HTTPS'”
- javascript - 在 Javascript 或 JQuery 上,在运行 add/remove mousemove 事件时
- html - 如何覆盖来自多个媒体查询的css中的样式。?
- json.net - 是否可以将 [JsonIgnore] 设为默认值并仅注释我想要的属性?
- python - 子流程管道中断程序
- angular - 使用 Angular Gridster2 更新模型后组件不刷新