在 C 中创建多个随机字符串

标签 c string random

我编写了一个代码来创建多个随机字符串。但是每次我打印它时,即使每次都创建不同的字符串,也只会多次打印最后一个字符串。谁能告诉我我做错了什么。

    static const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz";

    char s[5],*b[5] ;

    int num =0;
    for(int j=0;j<5;j++)
    {
        *b=(char*)malloc(sizeof(char*)*10);
        for (int i = 0; i < 4; ++i)
        {
            num = rand() % (sizeof(alphanum) - 1);
            s[i] = alphanum[num];
        }

        s[4] = 0;
        printf("%s\t",s);
        b[j] = s;
    }

    for(int j=0;j<5;j++)
        printf("\n%s",b[j]);
}

最佳答案

假设您已经使用例如 srand(time(NULL)); 为随机数生成器提供了种子,这样它将在程序的每次运行中生成不同的随机数序列,您的代码中还有一个缺陷:

s 是指向字符数组的指针。通过赋值b[j] = s;,你只给b[j]赋值了s的指针(内存位置),而不是s 的内容。由于 s 的内存位置没有改变,因此 b 的所有条目都包含对相同字符串 s 的相同引用,该字符串已更改多次次。要将 s 的当前内容复制到 b[j],请使用 strcpy() ,像这样。

strcpy(b[j], s);

关于在 C 中创建多个随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25622930/

相关文章:

c - '目标无法到达' ('Port unreachable' ) 将数据发送到 127.0.0.1 (localhost) 上的 UDP 套接字时

c - 两遍汇编程序修复

c - 不中断切换和 i++ 与++i

php - 只打印字符串的前 5 行

c++ - 为什么具有随机数生成功能的 OpenMP 比串行代码慢

c - N个进程共享内存c

将字符串拆分为标记并计算元音的 C 程序

java - 删除引号内的文本

java - 生成特定范围内的随机数

python - 来自 2d numpy 数组的加权随机采样