【发布时间】:2014-11-02 09:12:28
【问题描述】:
下面的代码假设读取和存储输入的文本文件,并将其内容动态地适当地存储在结构中。第一个数字是专辑的数量,第二个是专辑中的曲目数量,每个标题前面的数字是该标题的字符数。
对于我到目前为止编写的代码,我试图让每个专辑都与 1 个独立的结构相关联,因此我创建了一个 Struct 数组。所以目前我能够正确读取专辑数量和曲目数量。但是,struct album 中的指针数组有问题。我在为其动态分配正确的内存以及将所有(在本例中为 17 个)轨道名称存储到整个指针数组中时都遇到了麻烦,而轨道标题前面没有数字。
示例文本文件:
1
17
16 Like an umbrella
...
15 Dynasty Warrior
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct album
{
int num_tracks;
char *tracks[];
};
int main(int argc, char *argv[]){
int numbALBUMS=0, numbCharInTrack=0;
int i=0,j=0;
FILE *albums;
albums = fopen (argv[1], "r");
fscanf(albums, "%d", &numbALBUMS);
struct album info[numbALBUMS];
for(i=0;i<numbALBUMS;i++){
fscanf(albums, "%d", &info[i].num_tracks);
for(j=0;j<info[i].num_tracks;j++){
fscanf(albums, "%d" , &numbCharInTrack);
//NEED HELP HERE
//fscanf(albums,"s",info[i].tracks[j]);
}
}
fclose(albums);
return 0;
}
【问题讨论】:
-
1)
char *tracks[num_tracks];-->char **tracks;或char *tracks[]; -
2)
struct album info[numbALBUMS-1];-->struct album info[numbALBUMS]; -
Ty,我用过 *tracks[];出于某种原因**曲目;没用,我可能没有正确使用它。
-
您必须由 malloc 保护。即
char **tracks;、tracks = malloc(17*sizeof(char *));..tracks[i] = malloc(len+1);..strcpy(tracks[i], buff);的 17 条轨道 -
strcpy(tracks[i],buff);最后?
标签: c memory memory-management dynamic