什么';使用C库函数生成随机字符串?

什么';使用C库函数生成随机字符串?,c,C,是否有一个库函数以与创建唯一文件名相同的方式创建随机字符串?它是什么?没有内置API,您可以使用(在*x系统上)/dev/uradom如: FILE *f = fopen( "/dev/urandom", "r"); if( !f) ... fread( binary_string, string_length, f); fclose(f); 请注意,这将创建二进制数据,而不是字符串数据,因此以后可能需要对其进行过滤 您也可以使用标准伪随机生成器: #包括 #包括 //大体上: srand(时

是否有一个库函数以与创建唯一文件名相同的方式创建随机字符串?它是什么?

没有内置API,您可以使用(在*x系统上)
/dev/uradom
如:

FILE *f = fopen( "/dev/urandom", "r");
if( !f) ...
fread( binary_string, string_length, f);
fclose(f);
请注意,这将创建二进制数据,而不是字符串数据,因此以后可能需要对其进行过滤

您也可以使用标准伪随机生成器:

#包括
#包括
//大体上:
srand(时间(空));
对于(int i=0;i

如果你真的需要随机字符串,你需要谷歌搜索,这是密码学的难题之一,至今还没有完美的解决方案:)

没有标准函数,但你的操作系统可能会实现一些东西。你考虑过翻阅手册吗?或者,这项任务足够简单。我很想用这样的东西:

#包括
#包括
#包括
无效随机序列(字符*,大小t);
内部主(空){
char str[]={[41]='\1'};//将最后一个字符设置为非零,以便我们以后可以基于它进行测试
rand_str(str,str-1的大小);
assert(str[41]='\0');//测试字符串终止符的正确插入
put(str);
}
无效随机长度(字符*目的地,大小/长度){
字符集[]=“0123456789”
“abcdefghijklmnopqrstuvwxyz”
“ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
while(长度-->0){
大小索引=(双)rand()/rand_MAX*(字符集大小-1);
*dest++=charset[index];
}
*dest='\0';
}
这样做的好处是可以在EBCDIC系统上正确工作,并且能够容纳几乎任何字符集。我没有将以下任何字符添加到字符集中,因为您显然希望字符串可以是文件名:

":;?@[\]^_`{|}" ":;?@[\]^_`{|}"
我认为这些字符中的许多可能在各种操作系统上的文件名中无效。

这方面没有标准函数,但编写一个很简单。据我所知,在标准C库中没有这样做的函数。然而,这已经被问了很多次了:如果使用EBCDIC作为字符集,您认为这个随机字符串中可能包含哪些字符?@modifiablelvalue不知怎的,我假设了ASCII。。。老实说,我并不是说答案是完整的“给我代码”,而是一种灵感。除非我做了以下调整:在includes部分:
#include
,否则在Mac上编译和运行的输出总是相同的。。就在
main中的所有内容之前:
srand((unsigned int)(time(NULL))
(随时间随机种子)为什么不
index=rand()%(sizeof charset-1)?@pmor因为我研究并确定了你建议的模式有细微的错误。@自闭症患者很有趣,谢谢!
":;?@[\]^_`{|}"