我有一个这样的结构设置:
typedef struct _aStruct
{
char aChar[32];
int target;
}
什么值会使这种溢出aChar
,以改变"目标"?
memset(aStruct.aChar,0,32)
如果这个问题从根本上有缺陷,我很抱歉,我是新手。
一个大问题是structs
上的填充是实现定义的。在一个编译器上工作的内容将导致另一个编译器上的段错误或内存损坏。只能说,32 或更小的值永远不会溢出,而 32 +sizeof(int)
或更小的值不会损坏其他内存,即使它确实溢出。
我认为问题出在语法上,也许你做了一个指针,而不是把它当作指针使用。
你的typedef没有名字,你必须让它像下面这样:
typedef struct _aStruct
{
char aChar[32];
int target;
} typedef_name;
你必须声明一个这样的变量:
typedef_name structVar;
并像这样使用它:
memset(structVar.aChar, 0, 32);
您也可以将其声明为指针,如下所示:
typedef_name *structVar;
并像这样使用它:
memset(structVar->aChar, 0, 32);