我有一个二进制文件,我以这种方式将数字存储为字符串:11 43 89 101等
我只想使用系统命令来读取存储的数字并将它们存储在字符串动态数组中,因为我不知道字符串最终将持续多长时间或多少。这是相关代码:
char **positions;
int all_names=0,i,j;
fd=open(argv[2],O_RDWR|O_CREAT,S_IRWXU);
i=0;
j=0;
do{
positions=(char**)malloc(sizeof(char*));
(*positions)[i]=(char*)malloc((MAX_SIZE+1)*sizeof(char));
do{
read(fd,positions[i][j],1);
}while(positions[i][j+1]!='\0');
i++;
}while(i<all_names);
for(i=0; i<all_names; i++){
for(j=0; positions[i][j]!='\0';j++){
printf("%c",positions[i][j]);
}
printf("\n");
}
}
所有名称都跟踪二进制文件中的条目数量。
当我运行它时,我遇到了分段错误。我存储数字的部分工作正常,我已经检查了文件。它总是存储数字及其后的'\0'
。
我得到这个警告,但不知道如何解决
警告:指针转换不兼容的整数,将'char'传递给'void *'类型的参数[-Wint-conversion] read(fd,positions [i] [j],1);
关于positions[i][j]
。
感谢您的帮助
编辑:将代码更改为:
char **positions;
int all_names=0,j;
positions=(char**)malloc(sizeof(char*));
*positions=(char*)malloc((MAX_SIZE+1)*sizeof(char));
fd=open(argv[2],S_IRWXU);
i=0;
j=0;
for(i=0; i<all_names; i++){
positions=(char**)realloc(*positions,(all_names) * sizeof(char*));
positions[i]=(char*)malloc((all_names+1)*sizeof(char));
for(j=0; ;j++){
read(fd,&positions[i][j],1);
if (positions[i][j] == ' ') {
break;
}
}
}
for(i=0; i<all_names; i++){
printf("%s\n",positions[i]);
}
}
现在我在运行时出现错误:
malloc: *对象0x20400036的错误:未分配正在重新分配的指针 * 在malloc_error_break中设置一个断点以进行调试 中止陷阱:6
我真的认为我应该每次在代码的较早部分更新all_names值时就重新分配。我在做什么错了?