単純な暗号化プログラムを作成しようとしていますが、数学的なものは何もありませんが、さらに先に進むには、プログラムでセグメンテーション違反の原因を知る必要があります。コードを簡素化しようとしました..
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 で明示的に指定しないと、このエラーが発生します。これは私が読んだことに対する私の理解です。より洞察力のある人がこれについてコメントしたい場合は、コメントしてください..