将数组中的元素数传递给函数?

时间:2015-06-02 18:39:13

标签: c++ c arrays c-strings

我正在编写一个将char数组传递给函数的DLL。我在这里定义了包含22个元素的char数组:

unsigned char data[22] = { 0x00, 0x0A, 0x00, 0x09, 0x70, 0x00, 0x72, 0x00, 
0x6F, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00,
0x79, 0x00 };

现在,我尝试将此数组传递给声明为:

的函数
bool sendData(unsigned char* sData, unsigned long sSize); 

有了这些论点:

sendData(data, 22);

此代码编译,但在调用此函数时崩溃程序。在调试时仔细查看,我可以看到我的函数sendData中存在访问冲突。展望得更远,我在运行时看到了datasData的值:

  1. data指向具有正确值(显然)
  2. 的22字节char数组
  3. sData指向由第一个字节以空值终止的char数组,仅包含一个值(0)
  4. 我很清楚,编译器不知道为sData分配22个字节,只是因为我没有为它指定任何长度。所以我的问题是:

      

    如何指定sData的长度以便参数   通过赢得了提前终止?

    如果我对这个问题不对,请纠正我并进一步解释。感谢您提前提供任何帮助!

    修改

    我理解\0data中的第一个字节和更多字节)是一个空终止符,会过早地结束数组。我要问的是如何来避免这种情况。我的理解是,sData从未给出特定的长度,因此在\0停止,但我可能错了。

    我被要求提供我的sendData函数:

    bool sendData(unsigned char* sData, unsigned long sSize)
    {
        try
        {
            Send(sData, sSize);
            return true;
        }
    catch (...)
        {
        return false;
        }
    }
    

    Send正在调用另一个模块的函数,但与该问题无关,因为当sData参数传递给sendData时,错误会先发生。< / p>

1 个答案:

答案 0 :(得分:-1)

不会发生sData的分配,只是指向你的数组。它在调试器中显示为空,因为它将char *显示为字符串,并且当存在'/ 0'(第一个字节)时字符串结束。这并不意味着sData没有正确的数据。写sData [0]。调试器中的sData [1]等,以查看正确的值。