gpt4 book ai didi

c++ - 如何将 void 指针转换为 int[3]?

转载 作者:太空宇宙 更新时间:2023-11-04 16:08:36 24 4
gpt4 key购买 nike

我需要调用第 3 方库并将 int[3] 作为 void * 像这样 [有效] 传递:

int pattern[3] = {2,4,10};
if ( OSTaskCreate( BlinkLED,
( void * ) pattern,
( void * ) &BlinkTaskStack[USER_TASK_STK_SIZE],
( void * ) BlinkTaskStack,
MAIN_PRIO - 1 ) != OS_NO_ERR )
{
iprintf( "*** Error creating blink task\r\n" );
}

但现在我需要解析一个字符串来获取模式数组,但我似乎无法正确处理。

首先我将字符串传递给解析器并取回数组:

int (&ParseBlinkOnCommand(char rxbuffer[3]))[3]
{
// Code parses rxbuffer and creates the 3 ints needed

int pattern[3] = {repeats, onTicks, offTicks};
return pattern;
}

然后我尝试像以前一样将它传递给 OSTaskCreate:

int pattern2[3] = ParseBlinkOnCommand(rxbuffer);                    
if ( OSTaskCreate( BlinkLED,
( void * ) pattern2,
( void * ) &BlinkTaskStack[USER_TASK_STK_SIZE],
( void * ) BlinkTaskStack,
MAIN_PRIO - 1 ) != OS_NO_ERR )
{
iprintf( "*** Error creating remote blink task\r\n" );
}

但我收到错误消息“数组必须使用大括号括起来的初始化程序进行初始化”。

正确的做法是什么?

最佳答案

首先,ParseBlinkOnCommand 返回对本地对象的引用,因此返回悬挂引用。

第二个 C 数组不可复制,所以 int pattern2[3] = ParseBlinkOnCommand(rxbuffer); 应该是 int (&pattern2)[3] = ParseBlinkOnCommand(rxbuffer);.

但为什么不使用 std::vectorstd::array(或自定义结构)?

std::vector<int> ParseBlinkOnCommand(const char (&rxbuffer)[3])
{
// Code parses rxbuffer and creates the 3 ints needed

return {repeats, onTicks, offTicks};
}

然后

auto pattern2 = ParseBlinkOnCommand(rxbuffer);                    
if ( OSTaskCreate( BlinkLED,
pattern2.data(),
&BlinkTaskStack[USER_TASK_STK_SIZE],
BlinkTaskStack,
MAIN_PRIO - 1 ) != OS_NO_ERR )
{
iprintf( "*** Error creating remote blink task\r\n" );
}

关于c++ - 如何将 void 指针转换为 int[3]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com