十几行异或运算代码为何在这个地方停止??
时间:2010-08-05
来源:互联网
我想把一个文本里的每一个字符都做一个异或运算。
结果发现一个问题,无论你多长的文本,运算只做了只前十几个字符的异或就停止了,下面的死也不运算了。
何解。。。。。
代码:
#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
结果发现一个问题,无论你多长的文本,运算只做了只前十几个字符的异或就停止了,下面的死也不运算了。
何解。。。。。
代码:
#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
作者: yyangh 发布时间: 2010-08-05
你只从文件里读了100个字节当然只异或了100个字节了。。。。
作者: xutopia 发布时间: 2010-08-06
本帖最后由 zhangsuozhu 于 2010-08-06 08:45 编辑
从上面的代码看出。如果异或的是'x',则str中’x‘的位置将被0所代替。
如果第二次还原时用strlen,得到的长度到'\0'就结束了。
所以本代码可能还原不全。即最长到'x'处。
从上面的代码看出。如果异或的是'x',则str中’x‘的位置将被0所代替。
如果第二次还原时用strlen,得到的长度到'\0'就结束了。
所以本代码可能还原不全。即最长到'x'处。
作者: zhangsuozhu 发布时间: 2010-08-06
QUOTE:
从上面的代码看出。如果异或的是'x',则str中’x‘的位置将被0所代替。
如果第二次还原时用strlen,得到 ...
zhangsuozhu 发表于 2010-08-06 08:44
如果第二次还原时用strlen,得到 ...
zhangsuozhu 发表于 2010-08-06 08:44
感谢这位大师啊,感谢!!!!!!!一语惊醒梦中人,你太强了!!!!
作者: yyangh 发布时间: 2010-08-06
回复 yyangh
不是什么大师,碰巧发觉问题了。不用客气
不是什么大师,碰巧发觉问题了。不用客气
作者: zhangsuozhu 发布时间: 2010-08-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28