我一直在重写我的一些函数以返回 int 而不是结构,这样我就可以做到这一点
if ( function(&struct1,vars) != 0 )
{
// die and give error
}
代替:
结构 = 函数(变量);
然而,我在这里遗漏了一些概念,因为每当我尝试在主结构中访问我的结构的值时,我都没有得到在函数中分配给它的值。如果有人可以向我解释我的记忆/变量到底发生了什么(我会写下我认为会发生什么)以及为什么它不起作用,我将不胜感激。
主要(缩短):
int main (int argc, char *argv[]) {
arguments args;
data data;
scan scans;
printf("Value at start %i\n",scans.number);
if (scan_extractor(&args,&scans) != 0) // Pass the reference of the struct to scan_extractor (while still being un-initilizaed, something I don't quite grasp).
{
printf("Error in argument reader\n");
exit(0);
} else {
printf("Main thinks %i scans\n",scans.number);
}
return(0);
}
功能(scan_extractor):
int
scan_extractor(arguments* args, scan* scans)
{
FILE* fr;
int counter = 0;
fr = fopen(args->scans,"r");
scans = calloc(MAX,sizeof(scan)); // Allocate memory to store multiple instances of the scan object
while (fgets(mzML_buffer,MAX_BUFFER,fr) != NULL)
{
(scans+counter)->id = atoi(mzML_buffer); // Modify the global version of scans
counter++;
}
scans->number = counter;
printf("Function read %i scans\n",scans->number);
return(0);
}
读取的文件包含 1 行包含值 1
我得到的输出是:
Value at start 32767
Function read 1 scans
Main thinks 32767 scans
为什么这让我发疯是因为可以使用类似的语法从 main 访问包含输入参数的几乎相同的代码块(仅结构参数的 char* 值与结构扫描的 int 值)。