我一直试图让这个C程序工作一段时间,但我仍然在内存分配上遇到了一些麻烦。这项工作的要点是,它应该从文件的第一行读取一个字符串,然后从第二行读取2个数字,然后是3个列向量,每个数据的成员数量是三倍之间的差异。 2读数字。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void read(char **banda, int *s, int *sf, int **vs, char **vcs, char **vd)
{
FILE *fin;
int i;
fin = fopen("date.in", "r");
*banda = (char*)malloc(50*sizeof(char));
fgets(*banda, 50, fin);
fscanf(fin, "%d", s);
fscanf(fin, "%d", sf);
fseek( fin, 1, SEEK_CUR );
int l = 3* ( (*s)-(*sf) );
*vcs = (char*) malloc( l * sizeof(char) );
*vd = (char*) malloc( l *sizeof(char) );
*vs = (int*) malloc( l * sizeof(int) );
for( i = 0; i< l ; i++ )
{
fscanf(fin, "%d", vs[i]);
fscanf(fin, " %c", vcs[i]);
fscanf(fin, " %c", vd[i]);
fseek( fin, 1 , SEEK_CUR );
}
fclose(fin);
}
int main()
{
char *banda;
int i;
int s, sf;
char *vcs;
char *vd;
int *vs;
read(&banda, &s, &sf, &vs, &vcs, &vd);
for( i = 0; i < strlen(banda) ; i++ )
{
printf("%c", banda[i]);
}
printf("%d %d\n", s, sf);
for( i = 0; i < 3*(s-sf) ; i++ )
{
printf("%d %c %c\n", vs[i], vcs[i], vd[i]);
}
}
Example input:
Helen
2 1
1 H A
2 B C
5 K I
但是,我似乎无法为它分配内存。如果我经过i = 0(也就是数组中的第一个位置),程序会向我显示一个整洁的“分段错误”#34;。但是,如果我只为每个数组写入ONE值,它就不会崩溃。有一些我严重缺失的东西,我无法弄明白。
答案 0 :(得分:1)
问题在于:
fscanf(fin, "%d", vs[i]);
fscanf(fin, " %c", vcs[i]);
fscanf(fin, " %c", vd[i]);
变量vs
,vcs
和vd
是指向数组的指针。在这里,您将它们视为指针数组。您需要首先取消引用指针,然后获取要写入的数组元素,然后获取其地址:
fscanf(fin, "%d", &(*vs)[i]);
fscanf(fin, " %c", &(*vcs)[i]);
fscanf(fin, " %c", &(*vd)[i]);