【发布时间】:2013-10-24 18:56:55
【问题描述】:
有以下代码:
文件:types.h
typedef struct Struct_A_T
{
int A;
char B;
float C;
}Struct_A;
文件:code.c
#include "types.h"
void Function(const void *const ptr)
{
Struct_A localStruct = *((Struct_A *)ptr);
localStruct.A = 1000;
localStruct.B = 250;
localStruct.C = 128.485;
}
文件:main.c
#include "types.h"
void Function(const void *const ptr);
int main(void)
{
Struct_A MyStruct1 = {2, 5, 2.8};
float local = 24.785;
/* Correct call */
Function(&MyStruct1);
/* Incorrect call!!! */
Function(&local);
}
并且知道指向 void 的指针可以用作“通用”指针。如何在 "Function" 内部检测到在 void 指针中传递的类型是否正确,以避免文件 main.c 中的最后一次调用引发的运行时错误?
【问题讨论】:
-
空指针和类型安全是相互排斥的概念。你不能同时拥有两者,至少在 C 语言中是这样。
标签: c pointers runtime-error void-pointers