sc_memset中的易变参数

问题描述 投票:0回答:1

我正在编写的C程序的一部分包括使用sc_memset()函数初始化输入表。该表由typedef结构定义,如下所示。

typedef struct {
    UINT32 switchnum;
    UINT32 feedback[8];
    UINT32 switch_output[8];
} SWITCH_CHECK_IN;

SWITCH_CHECK_IN switch_input_table;

所有表元素,即switchnum,feedback和switch_output应该初始化为零。用于初始化的sc_memset函数原型为:

extern void sc_memset (volatile unsigned char *dest, unsigned long n, unsigned char data);

我已经编写了初始化代码,并且由于SWITCH_CHECK_IN和volatile unsigned char中的类型不同,我尝试按照以下方式进行一些强制转换(我尝试了几种强制转换语句),但是每次我都从指针类型不兼容'错误。

while( *(volatile unsigned char *) &switch_input_table) {
{
   sc_memset( &switch_input_table, sizeof(switch_input_table), 0 );
}

我是C语言的新手,所以我不确定我的一般方法是否正确。好的,1.我哪里出问题了?你能告诉我正确的方法吗?2.可以使用哪些其他方法?提前致谢。

c typedef volatile memset
1个回答
0
投票

您需要将结构体的指针转换为指向无符号字符的指针,就像在while条件下所做的一样:

sc_memset( (unsigned char*)&switch_input_table,...

您不应该在类型转换中使用volatile-该函数将volatile类型限定符隐式添加到传递的参数中。为什么它有volatile,我不知道-它是可疑的代码,除非该函数需要硬件寄存器等作为输入。

© www.soinside.com 2019 - 2024. All rights reserved.