我想制作一个程序(网络服务器-客户端)。 该程序的规范之一如下:
服务器将接收发送的包并将其保存到一个文件中,并具有唯一的名称(由服务器在传输开始时生成)。 例如 __tf_"unique_random_string".txt
我创建了一个函数,它返回一个指向创建的“唯一”字符串的指针。
问题是:如果我停止服务器然后再次启动它,它将生成相同的名称。
例如:生成此文件名,然后我停止了服务器。
__ft_apqfwk.txt
__ft_arzowk.txt
__ft_cdyggx.txt
我再次启动它并尝试生成 3 个文件名。它们将是相同的。
抱歉我的英语不好。我还在学习中。
我生成这个“唯一字符串”的函数是:
char *create_random_name(void)
{
const char charset[] = "abcdefghijklmnopqrstuvwxyz";
char *file_name;
int i=0;
int key;
if((file_name = malloc(16 * sizeof ( char )) ) == NULL)
{
printf("Failed to alloc memory space\n");
return NULL;
}
strcpy(file_name,"__ft_");
for(i=5 ; i<11 ; i++)
{
key = rand() % (int)(sizeof(charset)-1);
file_name[i]=charset[key];
}
strcat(file_name,".txt");
file_name[15] = '\0';
return file_name;
}
最佳答案
一种选择是将已使用的名称保存到文件中,并将它们用作 list 。您还想使用 srand(time(NULL))
等内容为 rand 提供种子。
另一个是忽略随机化,只是按顺序进行,例如aaa、aab aac...aba、abb 等。再次将循环的当前位置保存到文件中。
关于c - 独特的字符串生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286398/