我有一个奇怪的问题,我不知道原因,所以我想不出解决办法。
我的问题:
我有一个removeEntry函数,用一个结构数组作为参数,但是这个函数不起作用。
在我的代码的早期版本中,我在main函数之外(在每个函数之外)声明了我的结构数组,然后它就工作了。但是由于我现在在main函数中创建结构数组,所以必须将其作为参数,而现在removeEntry函数不起作用。
不起作用的代码:

void removeEntry(struct entry entries[])
{
    int entryNumber;
    int nrBytes = sizeof(entries);
    int arrayLength = nrBytes / sizeof(entries[0]);
    printf("\nEnter entry number to delete: ");
    scanf("%d",&entryNumber);
    while (scanfOnlyNumber(entryNumber) == false || entryNumber == 0 ||  entries[entryNumber].entry_number == 0)
    {
        printf("\nEnter a legit entry number to delete: ");
        scanf("%d", &entryNumber);
        // Tell the user that the entry was invalid
    }
    int i = 0;
    for(i = entryNumber; i < arrayLength - 1; i++)
    {
        entries[i] = entries[i + 1]; //removes element and moves every element after that one place back.
    }
    updateEntryNumber(entries);
    printf("\nEntry %d removed succesfully, and entry numbers updated!\n", entryNumber);
}

我的老师告诉我,当我在arraylength函数中创建结构数组时,我的main计算不起作用,
但我不知道为什么不起作用。如果有人能解释的话,那么我就可以自己解决我的问题了。
如果有人想要工作代码(我不把数组作为参数,因为我在每个函数之外创建数组),那么告诉我,我会发布它。

最佳答案

问题
将数组传递给函数时,不会传递整个数组,而是将指针传递给数组。因此,当您执行int nrBytes = sizeof(entries);时,实际上得到的是指针变量的大小,而不是数组的大小。
解决方案
将数组长度和指向数组的指针一起传递给函数,如下所示:

void removeEntry(struct entry entries[], int arrayLength){
    // your code
}

10-07 19:53
查看更多