我正在写一个将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的值:


data指向具有正确值的22字节char数组(显然)
sData指向以第一个字节为空的char数组,仅包含一个值(0)


对我来说很明显,编译器不知道为sData分配22个字节,只是因为我没有为其指定任何长度。所以我的问题是:


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


如果我对这个问题有误,请纠正我并进一步解释。感谢您的任何帮助!



编辑:

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

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

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


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

最佳答案

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

关于c++ - 将数组中的元素数量传递给函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30603982/

10-10 11:30