| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 925 人关注过本帖
标题:小菜一碟给大家...
只看楼主 加入收藏
喜雨
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-6-30
收藏
 问题点数:0 回复次数:12 
小菜一碟给大家...

作为初学者,有一个小问题想问问各位大牛...
for(i=0;i<40;i+=k)
for(j=0;j<k;j++)
{
if(s[i+j]!='\0')
s[i+j]=s[i+j]^m[j];
}
情况是这样子的..如果*s="turbo c",装在M[40]里面,有7个字符,现在为它加密,密码*S="abc",有3个字符.也就是上面的k=3......
对变量i来说,当i=6时
for(j=0;j<3;j++)
s[6]='c'!='\0',,,,执行s[6]=s[6]^m[0].....
然后,j++后,就成s[7]='\0'了,自然不执行了,j++后,s[8]=什么哟?
然后再次回到外循环.i=9....如此下去吗?但这时的s[i+j]=?
作为初学者,也许不该有此过多纠缠,但我想不通啊...
经过我努力,查得,如果是int a[]类型的.初值个数如果填不完的话,好像后面的自动充为0.
如果是char a[],类,填不满时好像是以空格自动填写的..
显然空格!='\0'啊,是不是要执行s[i+j]=s[i+j]^m[j]?
不要叫我去实验,已纪矣,运行正常,只是想不明其中过程,,,,
大鸟支持。。。


[此贴子已经被作者于2007-9-19 23:10:58编辑过]

搜索更多相关主题的帖子: 小菜 
2007-09-19 21:47
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
当i=6时
for(j=0;i<3;j++)
s[6]='c'!='\0',,,,执行s[6]=s[6]^m[0].....


那是不可能滴````6<3吗????



女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-19 21:59
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
这样改下```:

for(i=0;i<40;i+=k)
{
for(j=0;j<k;j++)
{
if(s[i+j]!='\0')
s[i+j]=s[i+j]^m[j];
else break;
}
if(j<k)
break;
}

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-19 22:13
喜雨
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-6-30
收藏
得分:0 
当i=6时
for(j=0;i<3;j++)
s[6]='c'!='\0',,,,执行s[6]=s[6]^m[0].....


那是不可能滴````6<3吗????



晕死...i=6时,,,,j=0,j<3,j++怎么不可能...*s是指向M[40]的

2007-09-19 22:49
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
当i=6时
for(j=0;i<3;j++)
s[6]='c'!='\0',,,,执行s[6]=s[6]^m[0].....


你看清楚```你发的是什么```是你笔误```误导我````

而且``你这个程序的确要改一下`````

就像我3楼说的````


[此贴子已经被作者于2007-9-19 22:54:16编辑过]


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-19 22:53
喜雨
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-6-30
收藏
得分:0 

现在郑重向楼上的道歉,确是笔误.
对不起了...
真是不好意思,真的对不住,误导了楼上的.现在已经改了
道歉..道歉


我还想说的是,这个程序是没错了,原代码是一个加密解密程序,能正常运行的.所以是不用改的,只是其中的问题,
我已经分析过了.
既是对的,就有对的理由,为什么运行不会出错啊?


下面是源代码,给大家分享..
#include "stdio.h"
#include "string.h"
main()
{
char s[40],m[8];
int i,j,k;
printf(" to code for the strings\n\n");
printf("please input the strings(less than 8 chars);");
gets(s);
printf("now code,please input the code:");
gets(m);
k=strlen(m);
for(i=0;i<40;i+=k)
for(j=0;j<k;j++)
{
if(s[i+j]!='\0')
s[i+j]=s[i+j]^m[j];
}
printf("the reulst:");
printf("%s\n",s);
printf("now to uncode:");
gets(m);
for(i=0;i<40;i+=k)
for(j=0;j<k;j++)
{
if(s[i+j]!='\0')
s[i+j]=s[i+j]^m[j];
}
printf("the strings are:\n");
printf("%s\n",s);
system("pause");
}


大家可以拿去运行一下,我试过的,能行得通..

[此贴子已经被作者于2007-9-19 23:17:52编辑过]

2007-09-19 23:16
wzhgzj
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2007-9-6
收藏
得分:0 
楼上的给点注释么!

命运在我手中
2007-09-19 23:30
喜雨
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-6-30
收藏
得分:0 

我怎么就没想到跟踪进入去看下?
惭愧,,,,
现在算是明白了,这个家伙还真会一直进行下去..直到i>=40...
那为什么还能正确...
因为\0在作怪,虽然后面是以空格填了,当然\0!=空格,所以还是要执行if(s[i+j]!='\0')
s[i+j]=s[i+j]^m[j];
的.只不过对\o没执行的话,还是\o.
在printf(%S)语句中,遇到\o时就认为字符串已结束了.
当然结果也对了呀....
原来调试,不仅是用于修正错误,也可以跟踪,发现秘密哦.....
在此谢谢二楼的哥们......
thank you....

2007-09-20 00:01
lengyang12
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-9-18
收藏
得分:0 

为什么后面是以空格填了呢,字符串的结束标志不是\0么?

2007-09-20 08:01
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
for(i=0;i<40;i+=k)
for(j=0;j<k;j++)
{
if(s[i+j]!='\0')
s[i+j]=s[i+j]^m[j];
}

我们先从里面看```只要s[i+j]的值不是'\0'``程序就会执行s[i+j]=s[i+j]^m[j];``但是不管s[i+j]的值是不是'\0'

2层循环都回j++直到j<k````

最外层循环不用说了```会一直i+=k`直到i<40```它根本不考虑有没有遇到'\0'






女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-20 08:45
快速回复:小菜一碟给大家...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022955 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved