从a-z生成随机字母

时间:2019-11-27 21:11:17

标签: c

我正在尝试创建一个程序,该程序将根据a-z生成一系列随机字母。由于某种原因,尽管它不起作用,但它也打印其他符号。我知道我如何使用看跌期权,因为不仅有一个序列,而且有“大小”,但我这样做只是为了检查信函生成器是否真正起作用,所以我现在要重点介绍一下。但是,欢迎对代码提出任何建议:)

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

char *randomString(int minSize, int maxSize);
void printStrings(char **strArray, int strArraySize);

int main()
{
    int size, i;
    char **ptr;


    printf("Type in the number of characters you would like to be used: ");
    scanf("%d", &size);

    ptr = malloc(size*sizeof(ptr));
    if (ptr==NULL) {
        printf("Cannot allocate memory. The program will now terminate.");
        return -1;
    }

    for (i=0; i<size; i++)
        ptr[i] = randomString(5, 20);
    ptr[i] = '\0';

    puts(*ptr);


    return 0;



}


char *randomString(int minSize, int maxSize)
{
    time_t t;
    srand((unsigned) time(&t));
    char *rndSize, *p;
    int i;
    rndSize = (char *)malloc(21);
    p = rndSize;
    for (i = minSize + rand() % 16; i<=maxSize && i>=minSize; i++)
        *p++ = 97 + rand() % 26;
  return rndSize;
}






2 个答案:

答案 0 :(得分:0)

这是一个可行的示例。

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

char *randomString(int minSize, int maxSize);
void printStrings(char **strArray, int strArraySize);

int main()
{
    time_t t;
    srand((unsigned) time(&t));
    int size, i;
    char **ptr;


    printf("Type in the number of characters you would like to be used: ");
    scanf("%d", &size);

    ptr = malloc(size*sizeof(*ptr));
    if (ptr==NULL) {
        printf("Cannot allocate memory. The program will now terminate.");
        return -1;
    }

    for (i=0; i<size; i++)
    {
        ptr[i] = randomString(5, 20);
        puts(ptr[i]);
    }

    return 0;

}


char *randomString(int minSize, int maxSize)
{
    char *rndSize, *p;
    int i;
    rndSize = (char *)malloc(maxSize+1);
    p = rndSize;
    for (i = minSize + rand() % 16; i<=maxSize; i++)
        *p++ = 97 + rand() % 26;
    *p = '\0';
  return rndSize;
}

在每个序列后添加NUL终止字符。它还会依次打印每个序列。随机数生成器初始化已放置在主体中,以避免每次都获得相同的序列。 t尚未初始化对我来说仍然很奇怪。仍然有很多修复/改进。

答案 1 :(得分:-1)

尝试

char *randomString(int minSize, int maxSize)
(...)
rndSize = (char *)malloc(21);
memset (rndSize , 0, 21*sizeof(char));
(...)

致谢。

路易斯