私はプログラム(ネットワークサーバ - クライアント)を作りたいと思っています。 このプログラムの仕様の一つは次です:ユニークな文字列ジェネレータ
サーバが送信されたパッケージを受信し、(転送が始まる瞬間に、サーバによって生成された一意の名前で、ファイルに保存します のEx __tf_」unique_random_string。作成した独自の 『文字列」
の.txt私はへのポインタを返す関数を作った』
を、問題がある:。。私は、サーバーを停止し、再度起動した場合、それは同じ名前が生成されます
例:このファイル名が生成された後、私は停止しますdサーバー。
__ft_cdyggx.txt
__ft_arzowk.txt __ft_apqfwk.txt
私は再びそれを起動し、私は3人のファイル名を生成してみてください。それらは同じになります。
私の英語のために残念です。私はまだそれを学んでいます。
My機能は、この「一意の文字列」を生成することです:
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]'は有効なインデックスではありません。文字列操作関数に 'file_name'を渡した場合でも、インデックス付けは' 0から15 'に、インデックスは '15'にしておきます。 – ameyCU
あなたはもっと説明できますか?私はあなたが言うことを理解していません。 –
これで私を助けてもらえますか?私はすでに数時間それをgoogledと私は良い解決策を見つけませんでした。 –