【问题标题】:Determine the size of a array of structs that it used as a parameter [duplicate]确定用作参数的结构数组的大小[重复]
【发布时间】:2016-10-19 11:52:58
【问题描述】:

我目前正在进行一个项目,我想将 CSV 文件的条目转换为对象向量。因此,我编写了一个函数,它将结构数组转换为向量。问题是,现在我的函数仅在用户输入正确大小的数组作为附加参数时才有效,但如果他输入更高的数字,则会引发异常,因为函数试图从不读取的数组条目中读取存在。现在我想知道是否有任何方法可以确定函数中结构数组的大小。我已经尝试过sizeof(array)/sizeof(array[0]) 但这不起作用。

这是我正在谈论的功能:

BANKMANAGEMENT_API int initAccounts(ACCOUNT accArray_[], const int numOfAcc_)
{
    BankmanagementClass *myBankmanagement = BankmanagementClass::createBankmanagementClass();

    for (int i = 0; i < numOfAcc_; i++)
    {
        ACCOUNT acc = accArray_[i];
        Account* newaccount = Account::accountStruct2Obj(&acc);
        myBankmanagement->setNextAccountId(myBankmanagement->determineNextId(newaccount->getAccountId(), myBankmanagement->getNextAccountId()));
        myBankmanagement->addAccount(newaccount);
    }
    LogInfo("Account Vector was initialized with data from Csv File.");
    return 0;
}

我想去掉numOfAcc_参数,这样用户就不会输入错误的尺寸了。

这是一个带有 C 接口的 dll。

【问题讨论】:

  • 使用std::vector。你为什么不使用它?
  • -1 问题出在您没有显示的调用代码中,而不是在您显示的代码中。由于缺乏可重复的例子而投票结束。
  • @Cheersandhth.-Alf 那是你的意见,你有权这样做。我认为寻求有关如何将函数更改为不依赖于传递正确大小的调用者的帮助没有任何问题。
  • 我不能使用 std:vector 它是一个应该是 C 并发的 dll 函数。没有调用代码,因为我的任务只是写dll
  • 这也是为什么我想让它成为虚拟证明的原因,因为我不是用户。我只通过我的 dll 提供功能

标签: c++ arrays struct size


【解决方案1】:

没有办法确定数组的大小。如果您可以控制accArray 的填充方式,您可以使用结束标记并在for 循环中检查此条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    相关资源
    最近更新 更多