C中的细分违规

时间:2015-02-24 14:56:25

标签: c pointers encryption

即时编码加密引擎,当我尝试调用函数“generar_clave”时,gcc说“段违规”,我在C中是新的,需要帮助。

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

int clave[27];

typedef double t_clave;

t_clave claves[27][1000];
int clave[27];

char letras[]="abcdefghijklmnopqrstuvwxyz ";



void generar_clave(int);
void ingresar_clave(int []);
int comprobar_repetir_vector(int, int []);
int comprobar_repetir_matriz(int, t_clave [][1000]);
void arrancar_motor(int, int);
int suma(int);


void main() {
printf("pruebas de snakecode\n\n");

generar_clave(20);

}

int comprobar_repetir_matriz(int numero, t_clave matriz[][1000]) {

    int x;
    int y;
    for(x=0; x<1000; x++) {

        for(y=0;y<27;y++) {

            if (numero==matriz[x][y]) {

            return 1;   
            }
        }
    }
    return 0;

}

int comprobar_repetir_vector(int numero, int vector[]){

    int x;
    for(x=0; x<1000;x++) {

        if(numero==vector[x]) {

            return 1;

        }


    }

    return 0;



}


int suma(int numero) {

    int resultado=0;
    while (numero>0) {

        resultado+=numero%10;
        numero/=10;
    }
    return resultado;
}

void generar_clave(int numero_suma) {

    int maximo;
    int minimo;

    int max=120;
    int min=60;

    maximo=numero_suma*max/20;
    minimo=numero_suma*min/20;

    int x;

    int num_random;

    srand(time(NULL));

    printf("fuera del bucle");
    for(x=0;x<27;) {
        printf("dentro del bucle");
        num_random=minimo+rand() % (maximo+1-minimo);
        if (comprobar_repetir_vector(num_random, &clave[0])==1) {           
            continue;
        }
        clave[x]=num_random;
        x++;
    }

    int y;
    printf("se ha generado la clave: \n");
    for(y=0;x<27;y++) {

        printf("(%d)", clave[y]);

    }
    printf("\n");
}


void ingresar_clave(int array[]) {

int x;

for(x=0;x<27;x++) {

    clave[x]=array[x];
    }

}

void arrancar_motor(int numero_cifras, int cantidad_numeros){

    char max[1000];
    char min[1000]="1";

    int x;
    int y;
    int z;
    int h;
    int num_random;

    for(x=0; x<numero_cifras; x++) {

        strcat(max, "9");

    }

    for(y=0; y<numero_cifras-1; x++) {

        strcat(min, "0");

    }

    int maxi=atoi(max);
    int mini=atoi(min);


    for(z=0; z<27; z++) {
        printf("Inicializando letra %s", letras[z]);
        for(h=0; h<cantidad_numeros;) {
            num_random=mini+rand() % (maxi+1-mini);
            if ((suma(num_random)==clave[z]) && (comprobar_repetir_matriz(num_random, claves))==0) {

                claves[z][h]=num_random;
                printf("%d", num_random);
                h++;



            } else { continue;  }


        }
    }
}

我已经尝试了所有的东西,找不到工作的方式,也适用于引擎,除了这个失败,还是要完成,这是一个非常简单的算法,我很久以前在python写道并想要移植它用于C学习C。

1 个答案:

答案 0 :(得分:3)

char max[1000];
char min[1000]="1";

int x;
int y;
int z;
int h;
int num_random;

for(x=0; x<numero_cifras; x++) {

    strcat(max, "9");

strcat将源字符串的副本附加到目标字符串,max必须是NUL终止的字符串:

char max[1000] = {0};

在这一行:

printf("Inicializando letra %s", letras[z]);

要打印char(不是字符串),请使用:

printf("Inicializando letra %c", letras[z]);