免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2638 | 回复: 7
打印 上一主题 下一主题

如何将内存某一部分赋值到一个变量? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-15 23:13 |只看该作者 |倒序浏览
可能题目没怎么说清楚,我贴代码吧
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <string.h>

  5. int main(int argc, char **argv)
  6. {
  7.     struct stat stats;
  8.     if(lstat(argv[1], &stats) < 0){
  9.         fprintf(stderr, "stat error\n");
  10.         return EXIT_FAILURE;
  11.     }
  12.    
  13.     char *buf = (char *)malloc(stats.st_size);
  14.     printf("size is %d \n", stats.st_size);
  15.    
  16.     char *end = buf + stats.st_size;
  17.     FILE *fp;
  18.     fp = fopen(argv[1], "rb");
  19.     fread(buf, 1, stats.st_size, fp);
  20.     fclose(fp);

  21.     int wordcount = 0;
  22.     char *p = buf;
  23.     int wordlen;
  24.     unsigned int *offset;
  25.     unsigned int *length;
  26.         
  27.     while(1){
  28.         if(p == end)
  29.             break;
  30.         wordlen = strlen(p);
  31.         if(wordlen == 0)
  32.             fprintf(stderr, "Error: worldlen == 0\n");
  33.         //    printf("%s\n", p);
  34.         p += wordlen + 1;
  35.         offset = (unsigned int *)p; //这里错误
  36.         printf("offset is %d\n", *offset);
  37.         p += sizeof(unsigned int);
  38.         length = (unsigned int *)p; //这里错误
  39.         printf("length is %d\n", *length);
  40.         p += sizeof(unsigned int);
  41.         wordcount++;
  42.     }
  43.     printf("total words: %d\n", wordcount);
  44.    
  45.     return EXIT_SUCCESS;
  46. }
复制代码

这是我读取星际译王词典的 .idx 文件的测试程序
按照他的词典说明该文件格式为
| 256字节的字符串 | unsigned int32 偏移量 | unsigned32 长度 |
其中,前面的字符串我已经能正确的取出来,但是后面的两个整数不知道怎么取出来, 请大家帮帮,谢谢.

[ 本帖最后由 tianyi1111 于 2007-10-16 09:06 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-10-15 23:25 |只看该作者
原帖由 tianyi1111 于 2007-10-15 23:13 发表
可能题目没怎么说清楚,我贴代码吧
#include
#include
#include
#include

int main(int argc, char **argv)
{
    struct stat stats;
    if(lstat(argv[1], &stats) < 0){
        fprintf(std ...

改成offset = *(unsigned int *)p和length = *(unsigned int *)p
限于x86使用,RSIC平台用memcpy

论坛徽章:
0
3 [报告]
发表于 2007-10-15 23:28 |只看该作者
memmove

论坛徽章:
0
4 [报告]
发表于 2007-10-16 08:32 |只看该作者
不好意思,刚发完贴学校就断网了, 谢谢ls两位, 我再试一试.

论坛徽章:
0
5 [报告]
发表于 2007-10-16 09:06 |只看该作者
原来这两个整数是网络字节序列的,将其转换成主机字节序列后正常
再次谢谢上面两位

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
6 [报告]
发表于 2007-10-16 09:22 |只看该作者
只是进程空间的内存。。。

论坛徽章:
0
7 [报告]
发表于 2007-10-16 09:46 |只看该作者
原帖由 zx_wing 于 2007-10-15 23:25 发表

改成offset = *(unsigned int *)p和length = *(unsigned int *)p
限于x86使用,RSIC平台用memcpy

汗死,都没看到offset和length是指针,就给lz回复了。太丢脸了
拍照留念,提醒自己以后回答问题前一定要把程序看清楚先

论坛徽章:
0
8 [报告]
发表于 2007-10-16 11:03 |只看该作者
zx_wing真够负责任的,佩服佩服。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP