我有一个奇怪的问题,我不知道原因,所以我想不出解决办法。
我的问题:
我有一个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
}