【问题标题】:issue in encryption program program in cc语言中的加密程序程序中的问题
【发布时间】:2026-02-20 06:10:01
【问题描述】:

我正在尝试根据我已经定义的 2 个字符串加密用户写的内容

程序运行良好

但是当用户写超过 30 个字符时我遇到了问题

在加密结束时有时程序会出现随机字符

#include<stdio.h>
#include<string.h>

main()
  {

  char  read [120] ;
  char  Encryption [55] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  char  Decryption [55] = {'k','K','f','z','L','S','j','T','v','u','B','F','q','U','P','h','n','M','i','Z','w','x','y','Y','W','t','m','s','N','J','Q','E','G','l','X','a','A','c','b','C','e','o','D','H','I','r','d','R','V','p','p','g'};
  char  new[120];
  int i , k;

  gets(read);

  for (i=0 ; i<strlen(read) ; i++)
  {
     for(k=0 ; k<strlen(Encryption) ; k++){
             if (read[i]==' ')  new[i]=' ';
             else if (read[i] ==  Encryption[k]){
                         new[i]=Decryption[k];}
                         }
             }


     puts(new);
     getch();

  }

例如当用户写入 ((( ALNOR ALNOR ))) 时输出为 (((kFUPM kFUPM )))

但是当我写 ((( ALNOR ALNOR ALNOR ALNOR ALNOR ))) 时,输出应该是 ((( kFUPM kFUPM kFUPM kFUPM kFUPM ))) 但出现的是 ((((kFUPM kFUPM kFUPM kFUPM kFUPM H&M)))

我不知道 H&M 是从哪里来的,当我再次运行它时,H&M 链接到其他东西

???!!!

【问题讨论】:

  • 在打印之前在解密的字符数组末尾添加一个 '\0'
  • 明明是C,你为什么把它标记为C++
  • char new[120] = {0};
  • 如果您尝试将其编译为 C++,您会看到一个愤怒的编译器...char new[120] new??

标签: c


【解决方案1】:

正如“Drax”所示,代码需要正确终止“新”字符串。也许通过在 for 循环之后插入一行:

  for (i=0 ; i<strlen(read) ; i++)
  {
     for(k=0 ; k<strlen(Encryption) ; k++){
             if (read[i]==' ')  new[i]=' ';
             else if (read[i] ==  Encryption[k]){
                         new[i]=Decryption[k];}
                         }
             }
  }

  new[i] = '\0';

【讨论】: