c - 如何增加每个循环中具有全局指针的数组大小

标签 c arrays pointers malloc realloc

我想将数组的大小设置为文本文件中的第一个整数(比如 5)。如果我将大小后面的所有 5 个整数保存到数组中,并且输入文件中仍然有行,则每次都需要增加数组的大小并将该行(整数)存储在数组中。 我写了这段代码:

int *x;
int *sizeP;
int main(int argc, char *argv[]) {

    int decision;
    FILE* file = fopen( argv[1], "r" );
    int size;
    fscanf(file, "%d", &size);
    sizeP = &size;              
    x=malloc(size*sizeof(int));
    int p=0;
    int num;

    while(fscanf(file, "%d", &num) ) {
        x[p] = num;
        p++;
        if (p >= size) {
            puts("Enter 0 to continue or 1 to terminate");
            scanf("%d", &decision);
            break;
        }
    }
    if (decision == 0){
        while(fscanf(file, "%d", &num) ) {
            size++;
            x = (int*)realloc(x, size*sizeof(int));
            x[p] = num;
            p++;
        }
        free(x);
    }
}

我不确定这段代码有什么问题?

提前谢谢您。

最佳答案

您检查fscanf结果的方式不正确。当到达文件末尾时,fscanf 不会返回 0,而是返回 EOF,它不为零(它在上定义为 -1)大多数平台)。

while(fscanf(file, "%d", &num) )

一旦到达文件末尾,就会进入无限循环,因为 EOF 不为零,因此其 bool 值为 true。

检查fscanf结果的正确方法是将其与预期的字段数进行比较。由于您正在读取一个值,因此您应该像这样返回:

while(fscanf(file, "%d", &num) == 1) // <-- return value should be 1 on success

关于c - 如何增加每个循环中具有全局指针的数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43024130/

相关文章:

c - C 中的类型问题

c - 不访问结构体指针作为另一个函数中的参数

c - C中从文件到结构

c++ - 如何从 C/C++ 中的给定 URL 获取视频链接

gcc 编译 SDL 的正确命令行参数

计算复利并显示每年的利息

python - 升级 numpy 数组并均匀分布值

C程序计算数字数组中数字的最高重复次数

arrays - Perl @$ 语法含义

在结构上创建双指针以按索引使用(类似于数组,但最大大小未知)