如何从C中的数组中删除一个元素?

How to delete an element from an array in C?

我试过向后移动元素,但它并没有使数组完全变空。

for(i=pos;i<N-count;i++)
        {
            A[i]=A[i+1];
        }

实际上,我必须测试输入数组中的键值,如果键值存在于数组中,那么我必须将其从数组中删除。当数组变空时,循环应该终止。这里的“计数”表示找到并删除键值之前的次数。并且,“pos”表示要删除的元素的位置。我认为动态内存分配可能会有所帮助,但我还没有学会。

根据您的描述和代码,“删除”可能是指移动值以删除给定元素并通过减少总数来缩短列表。

在您的示例中,poscount 会 be/should 相似(相差 1?)。

您的 for 循环的限制不是 N - count。是N - 1

那么,你想要:

for (i = pos; i < (N - 1); i++) {
    A[i] = A[i + 1];
}
N -= 1;

要进行常规删除,给定一些条件(匹配要删除的元素的 function/macro,例如下面的 match_for_delete),您可以在单遍数组:

int isrc = 0;
int idst = 0;

for (;  isrc < N;  ++isrc) {
    if (match_for_delete(A,isrc,...))
        continue;

    if (isrc > idst)
        A[idst] = A[isrc];

    ++idst;
}

N = idst;