我有一个二进制文件,可以将其存储为带有文本的文本格式:条目oneentry twoentry3(因此,单独的条目是连续的,但是单个条目可以包含两个由空格分隔的单词)
我有此代码:
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],O_RDWR|O_CREAT,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"); }
还是同样的问题。多谢您的协助,如果您觉得需要投反对票,请解释原因,以便我改善。如果需要更多信息,我会提供。
我有一个二进制文件,可以将其存储为带有文本的文本格式:条目oneentry twoentry3(因此,单独的条目是连续的,但是单个条目可以包含两个单词...
问题可能是您在读取文件时使用&data[i]
获得的不确定的行为。由于data[i]
是指向某些数据的指针,因此&data[i]
是指向该指针的指针,并且类型为char **
。