Zum Inhalt springen

Zufälligen String generieren


Dionysos211

Empfohlene Beiträge

"C - Programmieren"

Moin,

ich seh den Wald vor lauter Bäumen äh chars nicht mehr...

kann mir wer auf die Sprünge helfen, warum mir das hier in regelmäßigen abständen ein leeres Array erzeugt...

Ich wollte es so dynamisch wie möglich halten...

Die Generatorfunktion



char *rand_str(char *dst, int size)

{

   static const char text[] = "abcdefghijklmnopqrstuvwxyz"

                              "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

   int i, len = rand() % (size - 1);

   for ( i = 0; i < len; ++i )

   {

      dst[i] = text[rand() % (sizeof text - 1)];

   }

   dst[i] = '\0';

   return dst;

}

und hier n Teil aus der main wo ich die funktion nutze...
int main (void)

{

   char genChar[10];

   srand(time(0));

...

....


strcpy(pTempPatientenkrankheit->pNext->cName, rand_str(genChar, sizeof genChar));

strcpy(pTempPatientenkrankheit->pNext->cDiagnose, rand_str(genChar, sizeof genChar)); 

...

...




   return 0;

}

dies sorgt für die Ausgabe des Struct in einer Datei für schöne ;;; in gewisser Regelmäßigkeit...

Link zu diesem Kommentar
Auf anderen Seiten teilen


#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>

char *GenerateRandomString(int length);
int GenerateRandomNumber(int maximum);
void *AllocateNecessaryMemory(size_t size);
void InitRandomNumberGenerator();

int main(void){
const int maximalStringLength=10;
char *randomString;

randomString=GenerateRandomString(maximalStringLength);
printf("%s", randomString);
getch();
}

char *GenerateRandomString(int length){

const char *alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIKJLMNOPQRSTUVWXYZ";
const int alphabetLength=52;
int randomIndex;
int index;
char *randomString=NULL;

InitRandomNumberGenerator();

randomString=AllocateNecessaryMemory(length);

for(index=0; index<length; index++)
{
randomIndex=GenerateRandomNumber(alphabetLength);
randomString[index]=alphabet[randomIndex];
}
randomString[length]='\0';
return randomString;
}

void InitRandomNumberGenerator()
{
srand ( time(NULL) );
}

int GenerateRandomNumber(int maximum)
{
return (rand() % maximum)+1;
}

void *AllocateNecessaryMemory(size_t size)
{
return malloc(size+1);
}
[/php]

Bearbeitet von lilith2k3
Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

erstmal vielen vielen dank für eure Mühen!!

Ich hab für mich mittlerweile heraus gefunden warum er mal n leeren string erzeugt...

hier:

i

nt i, len = rand() % (size - 1);

   for ( i = 0; i < len; ++i )

lasse ich ihm ja eine zufällige länge des strings generieren...

die länge kann auch 0 sein *Schlag an die Stirn"

Link zu diesem Kommentar
Auf anderen Seiten teilen

Er hat aber auch ein Speicherleck.

Potentiell (hier im Demo) ja.

Wobei mich da noch folgender Punkt interessieren würde (ist vielleicht ab vom Thema):

Wenn ich in einer Anwendung, wie hier geschehen, Speicher alloziere und nicht explizit freigebe: Was geschieht mit dem Speicher nachdem meine Anwendung geschlossen worden ist. Ist der weiterhin belegt, oder räumt das Betriebssystem hinter unordentlichen Anwendungen auf?

Letzeres war meine Vermutung, weshalb ich an der Stelle auf ein free verzichtet habe (was anscheinend nicht so klug gewesen ist).

Außerdem sollte GenerateRandomString nicht InitRandomNumberGenerator aufrufen, sonst bekommt man mehrfach denselben String, wenn man GenerateRandomString mehrmals in einer Sekunde (z.B. in einer Schleife) aufruft.

Danke für den Hinweis :]

Das sollte entsprechend bei der Übernahme des Beispiels beachtet werden.

Bearbeitet von lilith2k3
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wobei mich da noch folgender Punkt interessieren würde (ist vielleicht ab vom Thema):

Wenn ich in einer Anwendung, wie hier geschehen, Speicher alloziere und nicht explizit freigebe: Was geschieht mit dem Speicher nachdem meine Anwendung geschlossen worden ist. Ist der weiterhin belegt, oder räumt das Betriebssystem hinter unordentlichen Anwendungen auf?

Das kommt auf das Betriebssystem an. Die heute gängigen Desktopbetriebssysteme räumen nach Prozessende auf.

Letzeres war meine Vermutung, weshalb ich an der Stelle auf ein free verzichtet habe (was anscheinend nicht so klug gewesen ist).
Selbst wenn das Betriebssystem hinterher aufräumt, ist das nicht sauber. Je länger das Programm läuft, desto schlimmer wird das. Bei Dämonen/Diensten, die durchgehend laufen sollen, ist so etwas ein kritischer Bug.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...