c - 我在 C 中的随机字符串生成器不起作用
问题描述
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void randomGenerator(char *id, int length);
int main(){
char test[8];
randomGenerator(&test[0],strlen(test));
printf("%s",test);
}
void randomGenerator(char *id, int length){
char alphabet[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *gen;
gen = &alphabet[0];
for (int i = 0;i<length-1;i++){
srand(time(0));
int random = rand() % strlen(alphabet);
for (int k = 0; i < random;i++)
gen++;
id = gen;
gen = &alphabet[0];
id++;
}
id++;
id = '\0';
}
我尝试随机字符串生成器失败了,但我真的不知道为什么,有人可以帮我吗?当我编译它时,我得到的输出什么都没有,屏幕上没有字符串或没有字符。
解决方案
两个主要问题:
在数组的内容初始化之前使用
strlen(test)
,这意味着内容是不确定的,可能根本不包含空终止符。用于sizeof test
获取数组的大小(以字节为单位)。在
randomGenerator
函数中,您实际上并没有写入数组的元素,而是重新分配了指针。像id = gen
重新分配指针这样的赋值,它不会写入指针指向的位置。为此,您需要取消引用指针,如*id = *gen
.
还有一个小问题:你srand
在循环中调用。这将在每次迭代时重置种子,如果使用相同的数字(很可能在这里)播种,那么rand
函数将返回相同的值。您应该只为随机数生成器播种一次。
推荐阅读
- java - 如何使用 JFileChooser 通过连接文件名来打开文件
- java - How can I get running application names in background?
- vba - 从网站下载 VBA 文件 - 弹出窗口
- html - 现场直播时网站上未显示 HTML 选项卡图标
- postman - Postman 中防止生产中破坏性 API 调用的“最佳实践”是什么
- python - 如何在python中将字典转换为列表
- c++ - 使用嵌套 if 语句的意外结果
- javascript - 将 datalist 选择分配给数组以执行功能
- c++ - 哪个演员表应该与模板类参数一起使用,dynamic_cast 还是 reinterpet_cast?
- java - 我如何使用改造 2.3.0 解析 json 对象