当这个函数从它的调用中返回时,我似乎无法从中打印任何内容。当我在功能中尝试打印时,它可以正常工作但在通话后不会打印。不知道该怎么做。
int *sched;
getSchedFile(schFile, sched);
printf("%d\n",sched[1]);
void getSchedFile (FILE *file, int *schd){
/* Get the number of bytes */
fseek(file, 0L, SEEK_END);
int bytes = ftell(file);
fseek(file, 0L, SEEK_SET);
schd = malloc(bytes * sizeof(int));
int pos = 0, curDigit;
while((fscanf(file, "%d", &curDigit)) != EOF){
schd[pos]=curDigit;
++pos;
}
}
答案 0 :(得分:1)
您应该通过更改:
将指针传递给指针getSchedFile(schFile, sched);
为:
getSchedFile(schFile, &sched);
和
void getSchedFile (FILE *file, int *schd) {
为:
void getSchedFile (FILE *file, int ** schd) {
否则你只是更改函数中指针的本地版本,而不是原始版本。为简单起见,避免过多间接,可以将函数更改为:
void getSchedFile (FILE *file, int ** schd) {
/* Get the number of bytes */
fseek(file, 0L, SEEK_END);
int bytes = ftell(file);
fseek(file, 0L, SEEK_SET);
int * pschd = malloc(bytes * sizeof(int));
if ( pschd == NULL ) {
fprintf(stderr, "Couldn't allocate memory.\n");
exit(EXIT_FAILURE);
}
int pos = 0, curDigit;
while((fscanf(file, "%d", &curDigit)) != EOF){
pschd[pos]=curDigit;
++pos;
}
*schd = pschd; /* Update original pointer */
}
正如查理所提到的,如果你正在阅读%d
,那么文件中的字节数将不会与你从中读取的int
的数量相同,虽然你至少不会分配太少的记忆。
编辑:您可能还希望为函数提供返回类型int
并返回pos - 1
,以便调用者知道新数组中有多少元素(或最后一个元素的索引) element,只返回实际元素数pos
。)