我试图制作一个简单的加密程序,没有任何数学意义,但为了更进一步,我需要知道是什么导致了我的程序中的分段错误。我试图简化我的代码..
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 中明确告诉你要在数据段中存储多少,你会得到这个错误。这是我对所读内容的理解,如果有更深入的人想对此发表评论,请做..