Я хочу создать программу (сетевой сервер-клиент). Один из спецификации для этой программы в следующем:.Уникальный генератор строк
Сервер получает отправленные пакеты и сохранить его в файл с уникальным именем (генерируется сервером в момент начала передачи Ex __tf_ "unique_random_string ».txt
Я сделал функцию, которая возвращает указатель на„уникальную“строку созданного
проблема в том.. Если я остановить сервер, а затем запустить его снова, он будет генерировать те же имена
Ex: имена файлов были сгенерированы, а затем я остановился d сервер.
__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;
}
Неопределенное поведение присутствует в коде. 'file_name [16]' _isn't действительный индекс_. Вы выделяете байт «16», поэтому индексирование должно быть от «0 до 15» и оставить индекс '15', если вы передадите' file_name' функции строковой манипуляции. – ameyCU
Не могли бы вы объяснить больше. Я не понимаю, что вы хотите сказать. –
Не могли бы вы помочь мне в этом. Я уже много часов работал в Интернете, и я не нашел хорошего решения. –