c - 独特的字符串生成器

标签 c

我想制作一个程序(网络服务器-客户端)。 该程序的规范之一如下:

服务器将接收发送的包并将其保存到一个文件中,并具有唯一的名称(由服务器在传输开始时生成)。 例如 __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/

相关文章:

c - 为什么 execl 要求我在运行一个进程后点击 "Enter"?

python - 通过共享库连接 Python 和 Torch7(Lua)

c++ - 如何在 makefile 指令中包含 C 和 C++ 文件

C. 函数修改动态分配的二维数组时的段错误

c - 最初和 sleep 结束时在 C 中打印时间

c - 如何在c中打印文件的内容?

c - 如何在 GTK+ 中构建计算器?

c - 用于在 c 中反转字符串的优化代码

c++ - 'return' 可以在 C 中返回多个值吗?

c - C 代码中 if 和 switch 语句中的意外输出