我有一个二进制文件,可以将其中的单词存储为以下形式的文本:条目条目条目条目2条目3(因此,单独的条目是连续的,但单个条目可以包含两个用空格分隔的单词)
我有此代码:
char **data;
int start = 0;
data = malloc(all_names * sizeof(char*));
fd=open(argv[1],O_RDWR|O_CREAT,S_IRWXU);
for(i=0; i<all_names; i++){
data[i] = malloc((MAX_SIZE+1)*sizeof(char));
int end = atoi(positions[i]);
read(fd,&data[i],(end-start));
start = end;
}
for(i=0; i<all_names; i++){
printf("%s\n",data[i]);
}
Positions数组包含每个字符串的开始位置,除了第一个。
例如如果positions [0] = 9,则表示第一个条目有9个字符,第二个条目的第一个字符是字节号9。
我遇到了分割错误,该错误似乎是在尝试打印数组后立即发生的,但是我无法弄清楚是否是由于错误打印或单词存储不正确引起的。
现在,我在创建pos数组时遇到麻烦,并询问了类似的问题here。解决该问题后,此方法不起作用,我尝试了该版本,该版本看起来更像是我对其他问题的回答:
fd=open(argv[1],S_IRWXU);
for(i=0; i<all_names; i++){
positions[i] =malloc((MAX_SIZE+1)*sizeof(char));
int end = atoi(positions[i]);
for(j=0;j<(end-start) ;j++){
read(fd,&data[i][j],1);
}
data[i][j]=0;
printf("%s\n",data[i]);
}
打印时使用相同的代码,在同一点出现相同的段错误。
我尝试按字符打印字符:
start = 0;
for(i=0; i<all_names; i++){
int end = atoi(positions[i]);
for(j=0;j<(end-start) ;j++){
printf("%c",data[i][j]);
}
printf("\n");
}
还是同样的问题。多谢您的协助,如果您觉得需要投反对票,请解释原因,以便我改善。如果需要更多信息,我会提供。