【发布时间】:2014-11-03 21:22:32
【问题描述】:
对于课堂作业,我们的任务是使用read() 函数读取包含数字的文件。虽然我能够将数字读入缓冲区,但我无法将它们从缓冲区移动到 char *array 中,以便可以轻松访问和排序它们。任何建议表示赞赏。
int readNumbers(int hexI, int MAX_FILENAME_LEN, int **array, char* fname) {
int numberRead = 0, cap = 2;
*array = (int *)malloc(cap*sizeof(int));
int n;
int filedesc = open(fname, O_RDONLY, 0);
if(filedesc < 0){
printf("%s: %s\n", "COULD NOT OPEN", fname);
return -1;
}
char * buff = malloc(512);
buff[511] = '\0';
while(n = read(filedesc, buff+totaln, 512 - totaln) > 0) //Appears to loop only once
totaln += n;
int len = strlen(buff);
for (int a = 0; a < len; a++) { //Dynamically allocates array according to input size
if ((&buff[a] != " ") && (&buff[a] != '\n'))
numberRead++;
if (numberRead >= cap){
cap = cap*2;
*array = (int*)realloc(*array, cap*sizeof(int));
}
}
int k = 0;
while((int *)&buff[k]){ //attempts to assign contents of buff to array
array[k] = (int *)&buff[k];
k++;
}
}
【问题讨论】:
-
为什么要将读取的数据写入 char *buff[512] 而不是单个 char * buff = malloc(MAX_FILENAME_LEN)?
-
buff 保存的是文件的内容,而不是文件名。但是,我确实将 char *buff[512] 更改为 char * buff = malloc(512)。 512是教授推荐的。
标签: c system-calls