通过引用将字符数组传递给函数

Passing array of chars to a function by reference

本文关键字:函数 数组 字符 引用      更新时间:2023-10-16

我有一个函数:

 int getDBVal(UCHAR *myData[MAX_RECORDS], int &numRecords);

我称之为

int main()
{
    int rc;
    int NumRecords = 0;
    UCHAR *myData[MAX_RECORDS];
    rc = getDBVal(myData, numRecords)
    for (int i=0; i<numRecords; i++)
    {
       printf("Queue Name: %sn", myData[i];
    }
}

该函数从数据库中获取记录,并将其返回

{
  SQLFetch
  printf("Received %sn", dataStruct[0].charCol);
  myData[y] = dataStruct[0].charCol);
  numRecords++;
  y++;
}

输出为:

Received queue1
Received queue2
Received queue3
Queue Name queue3
Queue Name queue3
Queue Name queue3

为什么最后一个响应被复制到所有3个调用程序数组位置?

dataStruct[0].charCol

看起来您正在为每个值设置索引0中的值。我不知道dataStruct或y来自哪里,因为代码还没有发布。

似乎dataStruct[]在每次调用时都会被覆盖以获取新行。您正在将指向dataStruct[0].charCol的指针保存到myData数组的每个索引中,而不是从中复制文本。由于每个myData条目都有一个指向相同位置的指针,因此您将获得上次存储在该结构中的值。

我还要确保dataStruct[]在您尝试通过存储在myData中的指针打印内容时不会超出范围——这将调用未定义的行为。但这里并没有足够的代码来猜测。。。

变量myData[y]都指向dataStruct[0].charCol的地址。为了得到你想要的行为,你需要一个深度复制。您需要在myData[y]上分配足够的内存,并将dataStruct[0].charCol指向的字符复制到新分配的内存。你还需要记住,当你完成后释放内存。

为了让你的生活更轻松,使用一个strings:std::vector<std::string> myData(MAX_RECORDS);数组。您甚至不需要指定数组的大小,因为您可以指定push_back,并且向量将增长:std::vector<std::string> myData;