Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Realloc和sscanf合并为一个函数_C_File_Function_Malloc_Realloc - Fatal编程技术网

Realloc和sscanf合并为一个函数

Realloc和sscanf合并为一个函数,c,file,function,malloc,realloc,C,File,Function,Malloc,Realloc,我有一个文件有num行:每行包含一个数字。我想将每个数字保存到向量*vet。为什么这个代码不起作用 分段故障(堆芯转储) 我认为错误是save_numbers函数中的sscanf,但我不知道为什么 #include <stdio.h> #include <stdlib.h> /* This function allocate memory and save numbers into a vector */ int save_numbers (int **vet, int

我有一个文件有
num
行:每行包含一个数字。我想将每个数字保存到向量
*vet
。为什么这个代码不起作用

分段故障(堆芯转储)

我认为错误是
save_numbers
函数中的
sscanf
,但我不知道为什么

#include <stdio.h>
#include <stdlib.h>

/* This function allocate memory
and save numbers into a vector */
int save_numbers (int **vet, int *num)
{
    FILE *fin;
    int i = 0;
    char buff[10];

    if ( !(fin = fopen("numbers.dat", "r")) )
        return 1;

    while ( fgets(buff, sizeof(buff), fin) )
    {
        *vet = (int *) realloc (*vet, (i+1) * sizeof(int) );
        sscanf (buff, "%d", vet[i]);
        i++;
    }

    *num = i;

    return fclose(fin);
}

int main ()
{
    int i, num, *vet = NULL;    

    if ( save_numbers(&vet, &num) )
    {
        perror("numbers.dat");
        exit(1);
    }

    /* print test */
    for (i=0; i<num; i++)
        printf ("%d ", vet[i]);
    printf("\n");

    free(vet);

    return 0;
}
#包括
#包括
/*此函数用于分配内存
并将数字保存到向量中*/
保存整数(整数**vet,整数*num)
{
文件*fin;
int i=0;
字符buff[10];
如果(!(fin=fopen(“numbers.dat”,“r”))
返回1;
while(fgets(buff,sizeof(buff),fin))
{
*vet=(int*)realloc(*vet,(i+1)*sizeof(int));
sscanf(浅黄色,“%d”,兽医[i]);
i++;
}
*num=i;
返回fclose(fin);
}
int main()
{
int i,num,*vet=NULL;
如果(保存_编号(&vet,&num))
{
perror(“numbers.dat”);
出口(1);
}
/*打印测试*/
对于(i=0;i变化


@一个人,但如果我想用
int*vet
而不是
int-vect[MAX\u NUM\u OF NUMS]
我能做什么?我使用
realloc
来分配包含数字的内存的确切大小。但是为什么呢?
*vet=(int*)realloc(*vet,(I+1)*sizeof(int))
不正确吗?让我们小调一点:建议使用更大尺寸的
char buff[10];
,至少
char buff[13];
用于“-2147483648\n”或2倍于growth.@chux。您对
或2倍于growth是什么意思。
很有效!非常感谢!我能问您代码总体上是否好吗?
sscanf (buff, "%d", vet[i]);//vet : int **
sscanf (buff, "%d", &(*vet)[i]);