c++ - 将数组中的元素数量传递给函数?

标签 c++ c arrays c-strings

我正在编写一个 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 指向具有正确值的 22 字节字符数组(显然)
  2. sData 指向一个以第一个字节以 null 结尾的 char 数组,仅包含一个值 (0)

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

How do I specify the length of the sData so that the argument passed won't terminate early?

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

<小时/>

编辑:

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

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

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

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

最佳答案

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

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

相关文章:

使用 getchar() 读取字符串的 C 提示排序

java - 如何根据值用对象参数填充数组?

java - JButton 数组 Action 监听器仅适用于最后一个按钮

javascript - 使用 Mod 运算符对多个数组进行分页?

c++ - 为什么 "#define A"会干扰 "namespace A{}"?

c++ - 分配器构造()应该默认初始化而不是值初始化吗?

c - 为什么 gcc 使用 -I 选项找不到包含路径?

C 指向指针分配的指针

c++ - 大型嵌套 vector 的高效内存分配

c++ - 密码++ : CFB_Mode_ExternalCipher not working