Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zufälligen String generieren

Empfohlene Antworten

Veröffentlicht

"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...


#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

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"

Aber der andere von lilith ist echt schöner...

bin auch gerade dabei meinen neu zu schreiben, den poste ich dann auch nochmal...

trotzdem nochmal ein dickes Dankeschön !

Er ist wesentlich lesbarer?

Er hat aber auch ein Speicherleck. 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.

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.