C中的问题 - 如何擦除数据库结构中的数组

时间:2011-02-04 09:46:38

标签: c windows database

包含文件:

stdio.h
string.h
ctype.h
genlib.h
simpio.h
strlib.h

数据库结构如下所示:

typedef struct{

    catT *cats;
    int currentMaxSize;
    int currentNumberOfCats;
    int nextId;

} *DBT;

和“cats”结构看起来像这样:

typedef struct {

    int id;
    string name;
    char gender;
    int birthYear;
    int numberOfColours;
    string colours[MAX_COLOURS];

} catT;

如果我们说我在DBT数据库中有3只猫想要擦除 其中之一,我怎么能编码呢?我想要一个擦除功能 一只猫!

4 个答案:

答案 0 :(得分:1)

嗯,catT的大小是固定的。哪个好。

如果要删除列表中的最后一只猫,那么很容易。只需使用realloc()即可使DBT变小。 (新尺寸为2 * sizeof(catT))。

如果要删除不是列表中最后一只猫的猫,请更改它。如果您不关心排序,那么只需使用列表中的最后一个cat覆盖要删除的cat(使用memcpy()执行此操作)。然后你可以删除列表中的最后一只猫。

答案 1 :(得分:1)

void freeCat(int atIndex, DBT db)
{
    if (atIndex < db->currentNumberOfCats)
    {
        if (atIndex < db->currentNumberOfCats - 1)
        {            
            memmove(db->cats + atIndex, 
                    db->cats + atIndex + 1, 
                    db->currentNumberOfCats - atIndex - 1);
        }
        db->currentNumberOfCats--;
    }
}

但这很贵。如果要重复擦除猫,请使用链表或考虑在堆上分配catTcatT **cats),这样你只需要移动指针(不要忘记{{1那么猫)。

答案 2 :(得分:0)

我假设您将为*cats DBT的3只猫分配内存 要擦除其中一只猫,你需要释放你要擦除的猫的记忆 我不能编写代码,因为我不知道你使用的变量和函数,但我希望这能给你一些想法。

答案 3 :(得分:0)

void freeCat(int atIndex,DBT db) {     int i;

if (atIndex < db->currentNumberOfCats)
{         
    if (atIndex < db->currentNumberOfCats - 1)
    {
        for(i = atIndex; i < db->currentNumberOfCats; i++){
            db->cats[i] = db->cats[i+1];
        }
    }         
    db->currentNumberOfCats--;
} 

}

我做了这个功能,它完美无缺!感谢大家和@Daniel Gehriger开始这个功能,这对我非常有帮助!