CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  非技术类

很奇怪啊,字符串奇怪的改变???

楼主yangxingkuan(开发者)2006-03-18 12:06:09 在 VC/MFC / 非技术类 提问

对话框程序:  
  class   CNet1Dlg   :   public   CDialog  
  {  
  pubilc   :  
              .........  
                  int   m_Key[16][6][8];  
  char   key[8];  
              ..........  
  }  
  构照函数{  
            .......  
                  memset(key,0,strlen(key))   ;  
  memset(m_Key,0,strlen((const   char   *)m_Key))   ;  
              ........  
  }  
  void   CNet1Dlg::OnBtnKey()    
  {  
        int   cx[8][7],dx[8][7]   ;  
        .........  
        zhiHuan(cx,dx,17)   ;//key已经取得字符串  
       
      for(int   flag=1   ;flag<=16   ;flag++)  
      {  
      Ls(cx,flag)   ;  
      Ls(dx,flag)   ;  
       
      zhiHuan(cx,dx,flag)   ;  
      }  
       
  }  
  void   CNet1Dlg::zhiHuan(int   cx[][7],   int   dx[][7],   int   flag)  
  {  
  int   i=0   ,j=0   ;  
  int   bite[8][8]   ;  
   
  int   table[8][7]={{57,49,41,33,25,17,9},  
  {1   ,58,50,42,34,26,18},{10,2,59,51,43,35,27},{19,11,3,60,52,44,36},  
  {63,55,47,39,31,23,15},{7,62,54,46,38,30,22},{14,6,61,53,45,37,29},  
  {21,13,5,28,20,12,4}}   ;  
  int   table1[8][6]={{14,17,11,24,1,5},{3,28,15,6,21,10},{23,19,12,4,26,8},  
  {16,7,27,2,13,2},{41,52,31,37,47,55},{30,40,51,45,33,48},{44,49,39,56,34,53},  
  {46,42,50,36,29,32}}   ;  
  int   bite1[8][7]     ;  
   
  if(flag==1)  
  {  
           
  for(   i=0   ;i<=7;i++)  
  {    
        for(j=0     ;j<=7;j++)  
        {  
        bite[i][j]=(key[i]&1<<(7-j))>>(7-j)     ;  
   
        }  
  }  
  i=0   ;  
  j=0   ;  
  for(i=0   ;i<=7;i++)  
  {  
  for(j=0;j<=6;j++)  
  {  
  if(i<4)  
        cx[i][j]=bite[(table[i][j]-1)/7][(table[i][j]-1)%7]     ;  
  else    
        dx[i][j]=bite[(table[i][j]-1)/7][(table[i][j]-1)%7]     ;  
   
  }  
  }  
   
   
  }  
  else    
  {  
  for(   i=0   ;i<=7;i++)  
      {    
        for(j=0     ;j<=6;j++)  
        {  
        if(i<4)  
                bite1[i][j]=cx[i][j]     ;  
        else  
        bite1[i][j]=dx[i-4][j]     ;  
   
   
        }  
  }  
  if(flag==17)  
  {  
       
       
  flag=flag%16   ;  
  for(i=0   ;i<=7   ;i++)  
      for(j=0   ;j<=5   ;j++)  
      {  
     
                  m_Key[flag][i][j]=bite1[(table[i][j]-1)/7][(table[i][j]-1)%7]     ;  
      }  
  }  
  else  
  {  
  flag=flag-1   ;                 //                                   1  
  for(i=0   ;i<=7   ;i++)  
      for(j=0   ;j<=5   ;j++)  
      {  
     
                  m_Key[flag][i][j]=bite1[(table[i][j]-1)/7][(table[i][j]-1)%7]     ;                                                                         //                                             2  
      }  
  }  
   
   
   
  }  
   
  }  
   
  void   CNet1Dlg::Ls(int   cx[][7],   int   flag)  
  {  
  int   table[16]={1,1,2,2,2     ,2,2,2,1,2       ,2,2,2,2,2,1}     ;  
  if(table[flag]==1)  
  {  
  int   i=cx[0][0]     ,m=cx[0][1];  
  int   x1=0   ,y1=0   ;  
  for(x1=0;x1<=3;x1++)  
  for(y1=0;y1<=6;y1++)  
  {  
   
  if(y1<6)  
  {  
  cx[x1][y1]=cx[x1][y1+1]     ;  
  }  
  else   if(x1==3&&y1==6)  
  {  
  cx[x1][y1]=i   ;  
  }  
  else  
  {  
  cx[x1][y1]=cx[x1+1][0]     ;  
  }  
   
  }  
   
  }  
  else   if(table[flag]==2)  
  {  
  int   i=cx[0][0]     ,m=cx[0][1];  
  int   x1=0   ,y1=0   ;  
  for(x1=0;x1<=3;x1++)  
  for(y1=0;y1<=6;y1++)  
  {  
   
  if(y1<5)  
  {  
  cx[x1][y1]=cx[x1][y1+2]     ;  
  }  
  else   if(x1==3&&y1==5)  
  {  
  cx[x1][y1]=i   ;  
  }  
  else   if(x1==3&&y1==6)  
  {  
  cx[x1][y1]=m   ;  
  }  
  else  
  {  
  cx[x1][y1]=cx[x1+1][(y1+2)%7]     ;  
  }  
   
  }  
   
  }  
   
   
  }  
  flag=flag-1   ;                 //                                   1     觉的算法问题加上的  
    m_Key[flag][i][j]=bite1[(table[i][j]-1)/7][(table[i][j]-1)%7]     ;                                                                         //                 2   出现问题的地方  
   
  大家帮忙看看是怎么回是?  
  void   CNet1Dlg::OnBtnKey()   中运行for(int   flag=1   ;flag<=16   ;flag++)  
  当我没有加                           1         时在falg<=0x0000e     时key中字符没有改变,  
  falg=ox0000f     进入zhiHuan(cx,dx,flag)   ;后就改变了;  
  在zhiHuan(cx,dx,flag)   ;中如果屏蔽掉           2就不会出现key中字符没有改变,  
  如果不屏蔽到falg=ox0000f     时从2所在的循环出来时就改变了???  
  这是我加       1之前出现的,加一是觉得算法有问题加的,没有其它??  
  加           1后还是出现问题???  
  请大家看看是什么原因引起的,,在  
  zhiHuan(cx,dx,flag)   ;中怎么会引起字符改变了,但是就是在出了zhiHuan(cx,dx,flag)   ;就改变了??  
   
   
   
   
  问题点数:20、回复次数:2Top

1 楼zhenbe(一头栽在C里面)回复于 2006-03-18 13:02:12 得分 20

把下面声明的地方换个地方试试,或者  
  class   CNet1Dlg   :   public   CDialog  
  {  
  pubilc   :  
              .........  
                  int   m_Key[16][6][8];  
  char   key[8];  
              ..........  
  }  
  或者改成  
  class   CNet1Dlg   :   public   CDialog  
  {  
  pubilc   :  
              .........  
                  CString   m_strNoUse1;  
                  int   m_Key[16][6][8];  
                  CString   m_strNoUse2;  
  char   key[8];  
                  CString   m_strNoUse3;  
              ..........  
  }  
  可能是vc的bug.  
   
   
  Top

2 楼yangxingkuan(开发者)回复于 2006-03-18 21:40:35 得分 0

真的很奇怪,用楼上的方法后,  
  这样后可以编译,却不能运行了,  
  断点运行却抱错:  
  Unhandled   exception   in   net1.exe:0xc0000005:Acess   Violation  
  就加了几个成员变量,就如此了,  
  Top

相关问题

  • 关于字符串的一个很奇怪的问题.疑惑....
  • 连接字符串的奇怪问题
  • 奇怪的字符串是什么?
  • 字符串连接的奇怪问题
  • 奇怪的字符串函数!
  • 很郁闷,字符串操作出错
  • 字符串问题请教c高手,一个简单又奇怪的字符串问题。
  • 特别奇怪的问题,关于过滤的字符串
  • 奇怪的问题,关于字符串相加,帮忙看看?
  • 奇怪问题,不能输出大的字符串

关键词

  • cnet
  • 字符串
  • 奇怪
  • cnet1dlg
  • memset
  • key
  • cx
  • strlen
  • dx
  • flag

得分解答快速导航

  • 帖主:yangxingkuan
  • zhenbe

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo