我是Smalltalk的新手,我正在尝试做一个非常简单的程序,以这种方式从多个集合中生成一个集合:
假设我有一套军械库,而且每个军械库都拥有自己的武器套装,我想要做的就是编写一个方法,将每个军械库中的所有武器组合起来返回一个集合.
在此先感谢您的帮助!
很长一段时间以来,我一直在检查和使用这个程序而没有成功,希望你能帮助我.
想法是读取存储的目录c_Localpath并将读取的dirs复制到其中c_namesLocal以返回它们.
我在实施中做错了吗?程序打破了strcpy,我不知道为什么.
DIR* ptr_dir = opendir(c_Localpath);
char** c_namesLocal = calloc(1, 256);
size_t numElements = 0;
int returnCode =0;
struct dirent ptr_PrevDirEntry;
struct dirent* ptr_DirEntry = NULL;
returnCode = readdir_r(ptr_dir, &ptr_PrevDirEntry,
&ptr_DirEntry);
while ((returnCode ==0) && (ptr_DirEntry != NULL)) {
char* name = c_namesLocal[numElements];
strcpy(name, ptr_DirEntry->d_name);
ptr_PrevDirEntry = *ptr_DirEntry;
returnCode = readdir_r(ptr_dir, &ptr_PrevDirEntry,
&ptr_DirEntry);
numElements++;
c_namesLocal = realloc(c_namesLocal, 256 * numElements);
}
Run Code Online (Sandbox Code Playgroud) 我有一个分配,我需要读取和写入一个内存块(预分配),为此,我需要实现两个函数:
memory_read(base,offset,size);
memory_write(base,offset,size,buffer);
Run Code Online (Sandbox Code Playgroud)
到目前为止没问题,我成功实现了写作部分.问题在于memory_read.我需要它来返回一大块数据(可能是void*),然后我可以将它转换为我期待的任何数据并使用它.
仅作为一个例子.假设我已经为该内存编写了一个序列化结构.我想做这样的事情
void *variable;
variable = memory_read(pointer_to_where_it_is,offset,sizeof(some_structure);
(some_structure) variable // and use it for something
Run Code Online (Sandbox Code Playgroud)
这就是memory_read的作用
void *memory_read(void *base, int offset, int size){
void *buffer;
buffer = malloc(size);
memcpy(&buffer,base+offset,size);
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
当然,由于缓冲区存在于函数堆栈中,我在返回时会丢失对它的引用.
有什么想法怎么做?我不允许老师修改函数参数,否则我会传递&variable作为参数.
谢谢!