-4

我用 C 写了一个随机密码生成器。但是我的代码抛出了一个错误。问题是什么?我该如何解决?

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

int main()
{   
    srand((unsigned int)(time(NULL)));
    int k_sayi,i;
    srand((unsigned int)(time(NULL)));
    char kucuk_harf[26]="abcdefghijklmnoprstuvwxyz";
    char buyuk_harf[26]="ABCDEFGHIJKLMNOPRSTUVWXYZ";
    char sayilar[11]="1234567890";
    char ozel_karakter[13]="!'^+%&/=?_*";
    char *pass;

    printf("Parola kac karakterli olsun?: ");
    scanf("%d",&k_sayi);

    pass=(char *)malloc(k_sayi*sizeof(char));

    for(i=0;i<k_sayi;i++){
        pass[i]=rand()%(sizeof kucuk_harf);
    }
    pass[i]='\0';
    printf("%s",pass);

    return 0;
}
4

2 回答 2

0

你需要这样做,否则会出现越界写入和读取:

pass = malloc(k_sayi+1);

您还需要这样做才能获得可读的 ASCII 字符:

pass[i] = kucuk_harf[rand() % strlen(kucuk_harf)];

此外,删除您的两个srand调用并在之后放置一个,char *pass;以使您的代码符合 ANSI。

这是已注释掉未使用变量的代码的工作版本:

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

int main()
{
    int k_sayi,i;
    char kucuk_harf[]="abcdefghijklmnoprstuvwxyz";
/*    char buyuk_harf[]="ABCDEFGHIJKLMNOPRSTUVWXYZ"; */
/*    char sayilar[]="1234567890"; */
/*    char ozel_karakter[]="!'^+%&/=?_*"; */
    char *pass;

    srand(time(NULL));

    printf("Parola kac karakterli olsun?: ");
    scanf("%d", &k_sayi);

    pass = malloc(k_sayi+1);

    for(i=0;i<k_sayi;i++){
        pass[i] = kucuk_harf[rand() % (sizeof(kucuk_harf) - 1)];
    }

    pass[i]='\0';
    puts(pass);

    /* make sure to free */
    free(pass);

    return 0;
}
于 2019-07-28T18:55:10.310 回答
0

如果你改变

for(i=0;i<k_sayi;i++){
        pass[i]=rand()%(sizeof kucuk_harf);
    }

for(i=0;i<k_sayi-1;i++){
        pass[i]=rand()%(sizeof kucuk_harf);
    }

它应该工作。

如果你有一个 size 数组,你可以从ton遍历它。 您已经在 for 循环中执行了此操作,但随后想要访问,这是超出范围的。0n-1
pass[i]

于 2019-07-28T18:17:23.137 回答