Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将空指针强制转换为int[3]?_C++_Arrays - Fatal编程技术网

C++ 如何将空指针强制转换为int[3]?

C++ 如何将空指针强制转换为int[3]?,c++,arrays,C++,Arrays,我需要调用一个第三方库,并将int[3]作为void传入*如下[works]: int pattern[3] = {2,4,10}; if ( OSTaskCreate( BlinkLED, ( void * ) pattern, ( void * ) &BlinkTaskStack[USER_TASK_STK_SIZE], ( void * ) BlinkTaskStack, MAIN_PRIO - 1 ) != OS_N

我需要调用一个第三方库,并将int[3]作为void传入*如下[works]:

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::vector
std::array
(或自定义结构)


首先,
ParseBlinkOnCommand
返回对本地对象的引用,从而返回悬挂引用

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

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


不相关,但您正在返回对
int-pattern[3]
的引用,这是一个本地数组-不要这样做。
int-pattern[3]={repeats,onTicks,offTicks};回报模式返回局部变量的地址。这是未定义的行为。不相关,但您正在返回对
int-pattern[3]
的引用,这是一个本地数组-不要这样做。
int-pattern[3]={repeats,onTicks,offTicks};回报模式返回局部变量的地址。这是未定义的行为。正在使用名为patternType的结构(3个整型字段),因此pattern2现在是patternType类型。由于OSTaskCreate的第二个参数必须是void*如何传入结构?我在想(void*)和pattern2。。。在函数签名为“void BlinkLED(void*pdata)”的情况下,如何在BlinkLED函数内部将其转换回patternType?patternType myPattern=(patternType)pdata;不对…回答:
patternType pattern=*(patternType*)(pdata)现在使用名为patternType的结构(3个整型字段),因此pattern2现在是patternType类型。由于OSTaskCreate的第二个参数必须是void*如何传入结构?我在想(void*)和pattern2。。。在函数签名为“void BlinkLED(void*pdata)”的情况下,如何在BlinkLED函数内部将其转换回patternType?patternType myPattern=(patternType)pdata;不对…回答:
patternType pattern=*(patternType*)(pdata)
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" );
}