传递指向函数的指针

时间:2013-10-13 04:22:39

标签: c function pointers

当这个函数从它的调用中返回时,我似乎无法从中打印任何内容。当我在功能中尝试打印时,它可以正常工作但在通话后不会打印。不知道该怎么做。

    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;
    } 
}

1 个答案:

答案 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。)