如何回归动态大规模C

时间:2016-03-11 18:32:33

标签: c dynamic return

为什么我的方式不起作用? "消息"指Null

第一个功能:

void messageToBit(FILE *m,char *message )
{
    int fileSize = 0;
    int k = 0;
    char symb;
    fseek(m, 0, SEEK_END);
    fileSize = ftell(m);
    fseek(m, 0, SEEK_SET);
    message = (char*)malloc(8 * fileSize);
    /* some action with message */

}

并致电

void gg()
{
 char* message = 0;

    messageToBit(m, message);
....
}

为什么不指向正确的内存位置?

2 个答案:

答案 0 :(得分:1)

关键是你应该将指针作为参数传递给指针,以便以这种方式获得输出值。它可能会让初学者感到困惑,所以你可以通过返回一个指针来实现相同的结果:

char* messageToBit(FILE *m)
{
    int fileSize = 0;
    int k = 0;
    char* message;
    char symb;
    fseek(m, 0, SEEK_END);
    fileSize = ftell(m);
    fseek(m, 0, SEEK_SET);
    message = malloc(8 * fileSize); // as mentioned in comments, no cast
    /* some action with message */
    return message;
}

void gg()
{
 char* message = messageToBit(m);
....
}

答案 1 :(得分:0)

您需要了解,按值传递和按引用传递。将代码更改为

第一个功能:

void messageToBit(FILE *m,char **message )
{
    int fileSize = 0;
    int k = 0;
    char symb;
    fseek(m, 0, SEEK_END);
    fileSize = ftell(m);
    fseek(m, 0, SEEK_SET);
    *message = (char*)malloc(8 * fileSize);
    /* some action with message */

}

并致电

void gg()
{
 char* message = 0;

    messageToBit(m, &message);
....
}