为什么我的方式不起作用? "消息"指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);
....
}
为什么不指向正确的内存位置?
答案 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);
....
}