免费注册 查看新帖 |

Chinaunix

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

十几行异或运算代码为何在这个地方停止?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-05 23:50 |只看该作者 |倒序浏览
我想把一个文本里的每一个字符都做一个异或运算。
结果发现一个问题,无论你多长的文本,运算只做了只前十几个字符的异或就停止了,下面的死也不运算了。
何解。。。。。


代码:
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

encode(char string[])

{
        int len,i;
        len=strlen(string);
        printf("len:%d\n",len);
        for(i=0;i<len;i++)
        {
                string[i]^='x';
        }
        
}


main()
{
        int fd;
        char buffer[200];
        fd=open("/root/tt.txt",O_RDONLY);
        perror("open:");
        read(fd,buffer,100);
        close(fd);
        encode(buffer);
        printf("buffer:%s\n",buffer);
        encode(buffer);
        printf("buffer:%s\n",buffer);
}

文本内容:

Major opcode: 20 (X_GetProperty)
  Resource id:  0y2401373
kdeinit4: preparing to launch gusrbinirefoy
kdeinit4: preparing to launch gusrlib64libkdeinit4_kfmclient.so
deinit4: preparing to launch gusrlib64libkdeinit4_konqueror.so
Launched ok, pid = 18203
kdeinit4: preparing to launch gusrlib64kde4kio_sysinfo.so
kio_sysinfo(18209) kdemain: *** Starting kio_sysinfo
kio_sysinfo(18209) kio_sysinfoProtocol::glInfo: found_line  true
kio_sysinfo(18209) kio_sysinfoProtocol::memoryInfo: total  4921393152  free  4390510592  unit  1
*** nss-shared-helper: Shared database disabled (set NSS_USE_SHARED_DB to enable).
kio_sysinfo(18182) kdemain: *** kio_sysinfo Done
kio_sysinfo(18209) kio_sysinfoProtocol::memoryInfo: total  4925239296  free  4387401728  unit  1
kio_sysinfo(18209) kio_sysinfoProtocol::memoryInfo: total  4924084224  free  4386779136  unit  1
kio_sysinfo(18209) kio_sysinfoProtocol::memoryInfo: total  4926287872  free  4391145472  unit  1
Could not read Gnome Bookmarks file groot.gtk-bookmarks: Could not find file "root.gtk-bookmarks".


结果:

open:: Success
len:101

第一次异或:
buffer:XX5
XBXJHXP '?
          (


QrXX*
      
XBXXHJLHIKOKr
                   LBX

X
X X

y
len:101

第二次异或原还:
buffer:  Major opcode: 20 (X_GetProperty)
  Resource id:  0y2401373
kdeinit4: preparing to launch gusrbinfi

论坛徽章:
0
2 [报告]
发表于 2010-08-06 08:20 |只看该作者
你只从文件里读了100个字节当然只异或了100个字节了。。。。

论坛徽章:
0
3 [报告]
发表于 2010-08-06 08:44 |只看该作者
本帖最后由 zhangsuozhu 于 2010-08-06 08:45 编辑

从上面的代码看出。如果异或的是'x',则str中’x‘的位置将被0所代替。


如果第二次还原时用strlen,得到的长度到'\0'就结束了。

所以本代码可能还原不全。即最长到'x'处。

论坛徽章:
0
4 [报告]
发表于 2010-08-06 09:03 |只看该作者
从上面的代码看出。如果异或的是'x',则str中’x‘的位置将被0所代替。


如果第二次还原时用strlen,得到 ...
zhangsuozhu 发表于 2010-08-06 08:44



    感谢这位大师啊,感谢!!!!!!!一语惊醒梦中人,你太强了!!!!

论坛徽章:
0
5 [报告]
发表于 2010-08-06 09:17 |只看该作者
回复 4# yyangh


    不是什么大师,碰巧发觉问题了。不用客气
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP