【问题标题】:manipulating list of list in C在C中操作列表列表
【发布时间】:2021-05-12 21:23:08
【问题描述】:

所以我想操作另一个列表中的链表; 这是结构

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);
}

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

【问题讨论】:

  • 你需要解释一下“不起作用”是什么意思。这是否意味着它不编译?它给出了错误的答案?运行时会崩溃吗?它永远不会回来?
  • 你的 acces_num 函数实际上从不检查任何特定的数字......它只是继续遍历列表直到它到达末尾,并返回 NULL(如果最后一个节点的 suiv 为 NULL,至少)
  • 你是对的 Dmitri ,但是如何解决呢?
  • 在您的 while 循环中,将节点中的数字与您正在检查的数字进行比较,如果它们匹配,则返回指针。由于您对所有内容都使用字符串,因此您可能希望在比较之前将两者都转换为数字(对于 num 参数,在进入循环之前只执行一次)
  • @Dmitri 你是说这个吗:liste_fav *acces_num(abonnes *p, signed char *num) { liste_fav *point= &(p->liste); while (point != NULL) { if (strcmp(num,numero_fav_propre(point))==0) return (point);否则返回 NULL ;点=suivant_fav_propre(点); } }

标签: c list pointers


【解决方案1】:

您的代码numero_fav(point)!=num 看起来像是在尝试比较整数,而不是字符串。 numnumero_fav() 都是字符指针,而不是整数。 [我假设它们应该是表示 ascii 或类似数字的字符串)。因此,两个字符指针在功能上将是不同的内存部分,因此具有不同的指针值。

我认为您可能想要 strncmp(numero_fav(point), num, 20) != 0 代替您的测试用例。

请注意,硬编码20 可能也可以通过顶部的定义来完成:

#define NUM_SIZE 20
...
signed char numf[NUM_SIZE];

例如。您需要注意当有人试图向您传递一个长度超过 19 的数字字符串时会发生什么(您的代码没有显示数据的来源)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2021-04-01
    • 2023-03-16
    • 2016-12-12
    • 2019-09-24
    • 2020-09-03
    • 2012-03-17
    相关资源
    最近更新 更多