将数据从文件读取到堆内存的函数

Function to read data from a file into heap memory

提问人:blzy 提问时间:11/13/2022 最后编辑:trincotblzy 更新时间:11/13/2022 访问量:206

问:

我正在编写一个函数,用于读取文本文件中的成绩数并将它们存储到堆内存中。它将计数写入ptr_cnt指向的位置,并返回存储在所述堆内存中的第一个字节的地址。

我已经写了这个,计数工作得很好。但是,数据似乎没有写入堆中。当我打印出第一个堆时,我得到 0.000。

double *read_data(char const *file_name, int *ptr_cnt)
{
    FILE *read = fopen(file_name, "r");
    if (read == NULL)
    {
        return NULL;
    }
    int count = 0;
    char ch;
    while ((ch = fgetc(read)) != EOF)
    {
        if (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\0')
        {
            count++;
        }
    }
    *ptr_cnt = count;

    double *heap;
    heap = (double *)malloc(sizeof(double) * count);
    double num = 0.0;
    int i;
    for (i = 0; fscanf(read, "%lf", &num) != EOF; i++)
    {
        *(heap + i) = num;
    }
    fclose(read);
    return heap;
    free(heap);
}
c malloc 堆内存

评论

0赞 trincot 11/13/2022
第一个循环已经消耗了文件流,直到结束,因此第二个循环不会迭代。你真的使用过调试器吗?它会立即显示并为您节省有关 Stack Overflow 的问题。
0赞 JohnScott 11/13/2022
不要强制转换 的返回值。 返回一个 ,它可以隐式转换为任何对象指针类型。一般来说,强制转换是邪恶的,会在代码中隐藏更严重的错误。mallocmallocvoid*
0赞 JohnScott 11/13/2022
此外,最后什么也没做;这是死代码,因为前面的 return 语句使函数停止。free(heap)
0赞 blzy 11/14/2022
我在第一个循环后添加了一个倒带(读取),现在代码字很好。感谢您的回复。

答: 暂无答案