类型转换
大神帮忙看看这个程序,C++编程思想的第一个程序,问题主要出在void* fetch(Stash* S , int index);函数的返回值类型上,后面调用fetch函数时出现类型转换不成功,不知道这个是我的编译器不支持还是程序本身有问题,谢谢
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define BUFFSIZE 25
typedef struct STASHtag
{
int size;
int quantity;
int next;
unsigned char* storage;
}Stash;
void init(Stash* S , int Size);
void cleanup(Stash* S);
int add(Stash* S , void* element );
void* fetch(Stash* S , int index);
int count(Stash* S );
void inflate(Stash* S , int increase);
void init(Stash* S , int Size)
{
S->size = Size;
S->quantity = 0;
S->next = 0;
S->storage = NULL;
}
void cleanup(Stash* S)
{
if(S->storage != NULL)
{
puts("freeing storage!");
free(S->storage);
}
else
{
puts("storage is alreadly empty!");
}
}
int add(Stash* S , void* element)
{
if(S->next > S->quantity)
{
inflate(S , 100);
}
memcpy(&(S->storage[S->next * S->size]) , element , S->size);
S->next++;
return(S->next - 1 );
}
void* fetch(Stash* S , int index)
{
if(index >= S->next || index < 0)
return 0 ;
return (S->storage[index * S->size ]);
}
int count(Stash* S)
{
return S->next;
}
void inflate(Stash* S ,int increase)
{
void* v = realloc(S->storage , (S->quantity + increase)*S->size);
assert(v);
S->storage = v;
S->quantity += increase;
}
int main(void)
{
Stash intStash , stringStash;
int i;
FILE* file;
char buf[BUFFSIZE];
char* cp;
init(&intStash , sizeof(int));
for(i = 0 ; i < 50 ; i++)
add(&intStash , &i);
init(&stringStash , sizeof(char)*BUFFSIZE);
file = fopen("funtion.cpp" , "r");
assert(file);
while(fgets(buf , BUFFSIZE , file))
{
add(&stringStash , buf);
}
fclose(file);
for(i = 0; i<count(&intStash) ; i++)
{
printf("fetch(&intStash , %d) = %d\n" , i , *(int*)fetch(&intStash , i));
}
i = 0;
while((cp = fetch(&stringStash , i++)) != 0)
{
printf("fetch(&stringStach , %d) = %s\n" , i-1 , cp);
}
putchar('\n');
cleanup(&intStash);
cleanup(&stringStash);
}