- 论坛徽章:
- 0
|
可能题目没怎么说清楚,我贴代码吧
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/stat.h>
- #include <string.h>
- int main(int argc, char **argv)
- {
- struct stat stats;
- if(lstat(argv[1], &stats) < 0){
- fprintf(stderr, "stat error\n");
- return EXIT_FAILURE;
- }
-
- char *buf = (char *)malloc(stats.st_size);
- printf("size is %d \n", stats.st_size);
-
- char *end = buf + stats.st_size;
- FILE *fp;
- fp = fopen(argv[1], "rb");
- fread(buf, 1, stats.st_size, fp);
- fclose(fp);
- int wordcount = 0;
- char *p = buf;
- int wordlen;
- unsigned int *offset;
- unsigned int *length;
-
- while(1){
- if(p == end)
- break;
- wordlen = strlen(p);
- if(wordlen == 0)
- fprintf(stderr, "Error: worldlen == 0\n");
- // printf("%s\n", p);
- p += wordlen + 1;
- offset = (unsigned int *)p; //这里错误
- printf("offset is %d\n", *offset);
- p += sizeof(unsigned int);
- length = (unsigned int *)p; //这里错误
- printf("length is %d\n", *length);
- p += sizeof(unsigned int);
- wordcount++;
- }
- printf("total words: %d\n", wordcount);
-
- return EXIT_SUCCESS;
- }
复制代码
这是我读取星际译王词典的 .idx 文件的测试程序
按照他的词典说明该文件格式为
| 256字节的字符串 | unsigned int32 偏移量 | unsigned32 长度 |
其中,前面的字符串我已经能正确的取出来,但是后面的两个整数不知道怎么取出来, 请大家帮帮,谢谢.
[ 本帖最后由 tianyi1111 于 2007-10-16 09:06 编辑 ] |
|