【发布时间】:2015-02-02 23:29:03
【问题描述】:
所以我对 C 很陌生。我用 Java 做了很多编程,发现学习 C 非常困难。
目前我被分配从我们的终端窗口读取一个文件,该文件将包含一个整数列表。从这个列表中,我们必须读取值并计算平均值,我相信我做对了。
我唯一的问题是我不明白如何正确使用 fstat(),我阅读了手册页但仍然很难理解。在下面的代码中,我想使用 fstat() 来查找正在读取的文件的大小,这样我就可以为我的数组分配正确的空间量,用于存储从输入文件中读取的值。我只需要知道 fstat() 的正确用法和语法,从那里我相信我可以取得重大进展。提前致谢!
char *infile;
int fileSize;
int fd;
int i;
int j;
int temp;
int sum = 0;
int average;
/* enforce proper number of arguments
*/
if (argc != 1)
{
fprintf(stderr, "Too many arguments.\n");
exit(1);
}
infile = argv[1];
//open file
fd = open(infile, O_RDONLY);
//exit if open fails
assert (fd > -1);
//find size of file
fileSize = fstat(fd, blksize_t st_blksize);
//fine perfect size for array
temp = malloc(temp * sizeof(int));
//create file of perfect size
int intArray[temp];
//scan integers into our array
for (i = 0; i < fileSize; i++)
{
fscanf(infile, "%d", intArray[i]);
}
fclose(fd);
//add all integers into the array up
for (j = 0; j < fileSize; j++);
{
sum = sum + intArray[j];
}
//calculat average
average = (sum)/fileSize;
printf("Number of numbers averaged: %d\n Average of numbers: %d\n", fileSize, average);
if ( close(fd) == -1 )
{
fprintf(stderr, "error closing file -- quitting");
exit(1);
}
return 0;
}
【问题讨论】:
-
注意:
malloc(temp * sizeof(int))temp 在此处使用时是不确定的,因此会调用未定义的行为,因此了解fstat的工作原理不是唯一的问题。对temp的赋值,一个int而不是指针类型,只是在伤口上加了盐。