【发布时间】:2011-04-05 11:58:31
【问题描述】:
您好,我正在尝试使用 void * 作为 C 中的通用数据类型。我想要的是一种机制,我可以使用它来存储和获取任何东西。我写了一些代码,但在最后一种情况下它失败了。任何人都可以看看代码,如果您有任何其他想法,请告诉我。
我知道我要存储什么,所以那时我知道数据类型,但在重试期间我只知道起始地址和大小。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
static void store( void *destination, void *source, size_t size ) {
memcpy ( (char*)destination, source, size);
}
static void retrieve ( void *destination, void *source, size_t size) {
memcpy ( destination, (char*)source, size);
}
void *storage_char_ptr = (void*) malloc ( sizeof( char* ));
void *storage_int_ptr = (void*) malloc ( sizeof(int*));
void *storage_int = (void*) malloc ( sizeof( int));
int main() {
int int_in = 65;
void *int_out_ptr;
int *ptr = ( int*) malloc ( sizeof(int));
memcpy ( ptr, &int_in, sizeof(int));
store ( storage_int_ptr, &ptr, sizeof(int*));
retrieve ( &int_out_ptr, storage_int_ptr, sizeof(int*));
assert ( int_in == *(int*)int_out_ptr);
char *char_in = "HelloWorld!!";
void *char_out;
store ( storage_char_ptr, &char_in, sizeof(char*));
retrieve ( &char_out, storage_char_ptr, sizeof(char*));
assert ( strcmp ( char_in, (char*)char_out ) == 0 );
char_in = _strdup("HelloWorld!!");
store ( storage_char_ptr, &char_in, sizeof(char*));
retrieve ( &char_out, storage_char_ptr, sizeof(char*));
assert ( strcmp ( char_in, (char*)char_out ) == 0 );
/* This is where it is failing */
int_in = 55;
void* int_out;
store ( storage_int, &int_in, sizeof(int));
retrieve ( &int_out, storage_int, sizeof(int));
assert ( 55 == *(int*)int_out);
}
【问题讨论】:
标签: c