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]);