我正在写一个将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
中存在访问冲突。再往前看,我在运行时看到data
和sData
的值: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/