c - 加密程序中的段错误

标签 c

我正在尝试制作一个简单的加密程序,与数学无关,但为了更进一步,我需要知道是什么导致了我的程序中的段错误。我尝试简化我的代码..

char *
createAlfabeth(void)
{
    char * alfa = NULL;
    strcpy(alfa, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    int i, j=1, k=0;

    for(i=0; i<(sizeof(alfa)/sizeof(char)); i++, j+=3)
    {
        if(j>25)
        {
            j=1+(k++);
        }
        swap(alfa, i, j);
     }

     return alfa;
}

char *
codificator(char *mess, const char *alfa)
{
     int key[]=PRIVATE_KEY;
     char *newmess=NULL;
     int i, j;
     for(i=0, j=0; mess[i]!='\0'; i++, j++)
     {
          if(j>(sizeof(key)/sizeof(key[0])))
          {
               j=0;
           }
      newmess[i]=alfa[i+key[j]];
     }
     return newmess;
 }

 int
 main(void)
 {
     char *alfa=crearAlfabeto();
     printf("write your message :\n");
     char message[20];
     scanf("%s", message);
     char *codified=codificator(message, alfa);
     printf("The codified message is: %s \n", codified);    
     return 0;
 }

已解决:发布备忘录

我按照下面 ouah 和 Askmish 的建议解决了这个问题(感谢两人)。对于那些在谷歌上搜索这个答案的人,我想说这个问题与堆处理有关。由于我没有为稍后声明或初始化的字符串存储足够的空间,因此没有为它们分配足够的内存。

这是malloc、realloc、calloc(和free)函数的目的是要处理的。段错误来自于我试图超出代码中为数据段分配的内存。每个程序都为代码(代码段)和数据(数据段)分配内存,并且如果没有在 c 中明确告知要在数据段中存储多少内容,则会出现此错误。这是我对所读内容的理解,如果有更见解的人想对此发表评论,请这样做..

最佳答案

 char * alfa = NULL;
 strcpy(alfa, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");

您需要为数组对象分配内存。

例如:

 char *alfa = malloc(sizeof "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
 /* check that malloc succeeds here */
 strcpy(alfa, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");

关于c - 加密程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12983931/

相关文章:

java - 访问 SQL 数据库时避免列名冗余?

c - 如何避免信号处理程序中的竞争条件

c - 这是什么类型的函数(带代码的指针函数)?

python - 跟踪 python3 C 扩展中的严重内存泄漏

C Switch 语句 CMSIS FreeRTOS

c - 即使定义也没有写权限

c - char 数据类型在 C 中以 32 位和 64 位存储或表示的方式有何区别?

c - 如何分配动态内存并在重新分配后重新分配我们如何将中间释放的内存带到一个 block 内存

c - 关于按位运算符

C# 培训测验