c - 在静态列表 C 中的值之间插入节点

标签 c list pointers data-structures struct

我创建了以下结构:

typedef struct {
  char name[15];
  int ID;
} Employee;

typedef Employee Item;

typedef struct {
  Item items[5];
  int size;
} List;

我从使用此函数填充这些字段的文件中获取值:

void Insert (Item I, int position, List *L){

  int i, LastPos;

  LastPos = Length(L)-1;
  if((LastPos) >= position){
    for(i = 0; i < (LastPos - position); i++){
      L->items[i-(LastPos+1)] = L->items[LastPos-i];
    }
  }

  L->items[position] = I;   
  L->size = L->size+1;
}

当位置变量不同时(即,尚未放置的变量),则没有问题,我能够打印出保存的值 EG:

在位置 0 处插入姓名 Stacy ID 1928502

在位置 1 处插入姓名 Jimmy ID 1290589

当我为他们的姓名和身份证号调用打印功能时,他们打印出来很好。

但是,如果我在位置 0 插入 Jimmy,他的信息会被打印出来,但是,每次 EG:ID 变为 32767 时,Stacy 的信息都会显示为随机内存位置。为什么当我覆盖已经存在的位置时会发生这种情况即使我有一个循环应该重新分配覆盖信息的位置(列表中的一个空格)。

最佳答案

让我们检查一下这个表达式:

L->items[i-(LastPos+1)]

如果 Length() 返回 2(数组中当前的项目数),那么 LastPos + 1 应该是 2。现在当循环开始时,i0,这意味着 i - (LastPost + 1) 等于 0 - 2 -2。不是您通常在数组中使用的索引。

我建议你反过来,从最后一项循环到第一项:

for (int i = Length(L) - 1; i >= position; --i)
    L->items[i + 1] = L->items[i];

关于c - 在静态列表 C 中的值之间插入节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18996727/

相关文章:

c - 2 个类似的 C 程序,宏产生不同的输出

c# - 是否有阻止添加对象的 .NET 集合接口(interface)?

c++ - 取消引用指针到指针

c - 使用指向字符数组的指针

c# 从父类访问子类

检查两个指针​​是否在同一页上

c - 如何将数组从 .Net 传递到 C?

c - 在内核模块中,如何知道给定路径是文件还是目录?

php - 使用/发送 POST 数据时的 libcurl C 问题(不是 C++)

python - 从字典列表中返回最大的字典和