【发布时间】:2018-07-14 00:23:35
【问题描述】:
typedef struct {
char numeVolum[50]; ////this is what interests us!!!
short int anPublicare;
unsigned char stare;
int idPersoana;
} TVolum;
typedef struct {
char numeAutor[50];
char codTara[2];
int nrVolume;
TVolum* volume; /////this is what interests us!!!
} TAutor;
这两个结构都是动态分配的! listaAutori[0] 是一个指向 TAutor 结构的指针数组! (可以断定listaAutori是一个TAutor**类型)
fgets(listaAutori[0] -> numeAutor, 50, input);
fgets(listaAutori[0] -> codTara, 3, input);
fgets(listaAutori[0] -> volume[0].numeVolum, 53, input);
前两个 fget 读取良好。 但是第三个没有给我任何输出。
printf("\nNUme primul volum al lui Agatha: %s\n", listaAutori[0] -> volume[0].numeVolum);
换句话说,我有两个结构,A 和 B。 在 B 里面,我有一个字符串。 (指向字符的指针)
结构A中有一个指针pB。 还有一个指向 A 的指针数组。
像这样:
包含 pA 元素的指针数组 -> 结构 A -> pB -> 结构 B -> 我的字符串。
我正在尝试从文件中读取一行,并将该字符串存储在 numeVolum[50] 字符串中。我可以访问 TVolum 的唯一方法是使用指向 TAutor 的指针。
我不知道什么不起作用,printf 没有给我任何输出。 它应该打印一些东西。 (我从中读取数据的文件包含每一行的信息)
Autor* alocaAutor(int nrVolume)
{
TAutor* autor = (TAutor*)calloc(1, sizeof(TAutor));
autor -> volume = (TVolum*)calloc(nrVolume, sizeof(TVolum));
autor -> nrVolume = nrVolume;
return autor;
}
TAutor** alocaAutori(int nrAutori, int* nrVolumeAutor)
{
int i;
TAutor** vectorAutori = (TAutor**)calloc(nrAutori, sizeof(TAutor*));
for(i = 0; i < nrAutori; i++) {
vectorAutori[i] = alocaAutor(nrVolumeAutor[i]);
}
return vectorAutori;
}
输入文件示例:
2
1
1
Agatha Christie
UK
Ultimul caz al lui Hercule Poirot
我 100% 肯定它会读取最后一行之前的所有内容。 然后,当我尝试从 TVVolume 读取字符串中的最后一行时,它根本不起作用。
【问题讨论】:
-
您在哪里以及如何初始化卷指针?还尝试将最多 53 个字符读入字符串 [50] 可能会发生溢出
-
初始化 TAutor* 后,我还初始化了它的音量指针。
-
那 53 是随机的,反正我正在读的字符串小于 25。
-
我不确定这一行是否正确: fgets(listaAutori[0] -> volume[0].numeVolum, 53, input);它似乎很长,我以前从未这样做过
-
您应该添加该代码。也可能是输入文件的示例。
标签: c arrays pointers structure