首页 > 解决方案 > 在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);
}

你能告诉我错误在哪里吗!!

标签: clistpointers

解决方案


您的代码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 的数字字符串时会发生什么(您的代码没有显示数据的来源)。


推荐阅读