在函数 writeDmpFile
中,我正在调用 writeFile
。
请查看代码和注释。
我的问题是大小。在 writeDmpFile
中,我看到它是 380316。我尝试将它传递给 writeFile。
但是当我走到这里时,我得到了非常大的数字(3832907636190596508)。
我做错了什么。我预计 380316 会通过。
int writeFile(char *name, unsigned char *buff, size_t *size,const char *dir )
{
FILE * pFile;
chdir (dir);
pFile = fopen ( name, "wb");
//(gdb) print *size
//$5 = 3832907636190596508
fwrite (buff , sizeof(unsigned char), *size, pFile);
fclose (pFile);
return 1;
}
int writeDmpFile(GTree *tree, char *filename)
{
char dmpfilename[32];
dmpfilename[0] ='\0';
dmpParams_t params;
params.buff[0] ='\0';
int size =0;
params.size=&size ;
g_tree_foreach(tree, (GTraverseFunc)writeDmpFileLine, ¶ms);
sprintf (dmpfilename, "InstrumentList_FULL.csv_%.*s", 15, filename);
//here (gdb) print size
//$1 = 380316
writeFile(dmpfilename, ( unsigned char *)params.buff, ( size_t *)&size , dmpdir);//(size_t *)params.size, dmpdir);
}
最佳答案
( size_t *)&size
这很糟糕,因为 size_t
和 int
是具有不同表示的不同类型。 size_t
是无符号整数类型的别名,通常是 unsigned long
。在这里,您应该将 size
声明为 size_t
变量。
关于c - 将参数传递给函数(int 到 size_t),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22490417/