Zum Inhalt springen

Guybrush Threepwood

Mitglieder
  • Gesamte Inhalte

    4909
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    6

Alle Inhalte von Guybrush Threepwood

  1. Da sich ja im FAQ Bereich nichts tut *tadelndumsichschau*, hab ich mal folgendes verfasst und bin für Vorschläge offen: Dynamische Speicherverwaltung mit C Um, mit C, während der Programmlaufzeit Speicherplatz zu reservieren, brauchen wir zunächst einmal einen Zeiger vom entsprechenden Datentyp. Dabei kann es sich um jeden beliebigen Datentyp handeln, in unserem Beispiel soll es ein Zeiger vom Typ char sein. char *lpZeiger; [/PHP] Dieser Zeiger soll nun die Adresse des Speicherplatzes aufnehmen, den wir reservieren wollen. Dies könnte z.B. so aussehen: [PHP] lpZeiger = (char*) malloc(sizeof(char)); Dabei reserviert die Funktion malloc den Platz für die Größe eines chars und gibt die Adresse zurück, welche wir nur noch in einen char Zeiger casten müssen. Um nun mit dem reserviertem Speicher, auf den lpZeiger zeigt, arbeiten zu können benötigen wir den Dereferenzierungsoperator *. Dieser sagt dem Compiler das wir nicht auf den Inahlt von lpZeiger, sondern auf den Bereich auf den er zeigt, zugreifen wollen. *lpZeiger = 'h'; printf ("%c\n",*lpZeiger); [/PHP] Wenn wir den selbst reservierten Speicher nicht mehr benötigen, sollten wir auf keinen Fall vergessen diesen wieder Freizugeben. [PHP] free(lpZeiger); Wenn wir dies nicht machen entstehen Speicherlecks, da der Speicher ja immer noch reserviert ist. Wir können aber nicht nur Platz für einen einzigen character reservieren, sondern auch für mehrere. Die einzige Grenze die wir haben ist der virtuelle Speicher des PCs. Um Speicher für mehrere character zu reservieren gehen wir einfach folgendermaßen vor: char *lpZeiger; lpZeiger = (char*) malloc(12*sizeof(char)); [/PHP] Somit haben wir Speicherplatz für 12 Character reserviert, in die wir jetzt z.B. einen String kopieren können: [PHP] strcpy(lpZeiger,"Hallo Welt!"); Alle die sich fragen warum wir 12 Character für einen String mit 11 Zeichen reserviert haben sollten das 0 Zeichen nicht vergessen, mit dem jeder String abgeschlossen wird. Diesen String können wir jetzt ganz einfach anzeigen (oder sonst was damit machen) und sollten wieder nicht vergessen den Speicher freizugeben sobald er nicht mehr benötigt wird: printf ("%s\n",lpZeiger); free(lpZeiger); [/PHP] Das Ganze ist aber nicht nur in einer Dimension, sondern in beliebig vielen möglich. Um z.B. ein zweidimensionales Array eines beliebigen Datentyps anzulegen benötigen wir einen Zeiger auf einen Zeiger. Klingt konfus ist aber so;) Als Beispiel soll uns wieder der char Datentyp dienen: [PHP] char **lpZeiger; Wie bereits gesagt haben wir jetzt einen Zeiger auf einen Zeiger. Das folgende Beispiel sollte das etwas verdeutlichen. Wir reservieren uns jetzt Speicher für 4 Zeiger und lassen lpZeiger drauf verweisen: lpZeiger = (char**) malloc(4*sizeof(char*)); [/PHP] Wie wir sehen zeigt lpZeiger jetzt auf 4 einfache char Zeiger mit denen wir eben Speicher für den String "Hallo Welt!" reserviert haben. Genau das Selbe können wir jetzt auch mit unseren 4 Zeigern machen. Um die Sache zu vereinfachen reservieren für für alle 4 Zeiger einen gleich großen Speicherplatz und nehmen dazu eine Schleife: [PHP] for (int i=0; i<4; i++) lpZeiger[i] = (char*) malloc(6*sizeof(char)); Nun zeigt lpZeiger also auf ein Array von 4 char Zeigern und jeder dieser char Zeiger auf ein Array für 6 Character. Um nun einen String in diese 4 Arrays zu Speichern können wir den [] Operator benutzen: strcpy(lpZeiger[0],"Daß"); strcpy(lpZeiger[1],"ist"); strcpy(lpZeiger[2],"ein"); strcpy(lpZeiger[3],"Test."); [/PHP] Wenn wir auf ein einzelnes Zeichen innerhalb eines dieser Arrays zugreifen wollen können wir den [] Operator auch mehrmals verwenden: [PHP] lpZeiger[0][2] = 's'; Damit wäre z.B. der Rechtschreibfehler im ersten Array korrigiert:) Wenn wir diese Arrays nun ausgeben wollen können wir wieder folgendermaßen vorgehen: for (i=0; i<4; i++) printf ("%s ",lpZeiger[i]); [/PHP] Wenn wir nur ein Zeichen ausgeben wollen machen wir`s wieder wie oben: [PHP] printf ("%c\n",lpZeiger[1][0]); Wenn wir jetzt den reservierten Speicher nicht mehr benötigen und wieder freigeben wollen, müssen wir zuerst mit der untersten Ebene, also mit den 4 Character Arrays, anfangen. Wenn wir zuerst den Platz für die 4 Zeiger freigeben würden, könntne wir über diese ja nicht mehr auf die Arrays zugreifen. Das Ganze machen wir am Besten so: for (i=0; i<4; i++) free(lpZeiger[i]); [/PHP] Somit sind die 4 * 6 Zeichen wieder freigegeben und wir können die 4 Zeiger freigeben: [PHP] free(lpZeiger); Das war`s schon:) Wie bereits gesagt lässt sich das mit jedem beliebigem Datentyp in C und mit beliebig vielen Dimensionen wiederholen. Bei mehr Dimensionen sollte man aber darauf achten, dass hier der Speicherverbrauch sehr schnell anwachsen kann. Für ein dreidimensionales Array vom Typ char mit je 100 Elementen wären das immerhin 100*100*100*sizeof(char) Byte, also 1000000 Byte und das sind ca. 1MB.
  2. Ich hab ein Fenster mit einem Menü und einer Toolbar, auf der Toolbar befindet sich eine Tabcontrol. Wenn der Benutzer jetzt im Menu "Neu" wählt, wird ein RichEdit Fenster als MDI Child erstellt und ein Tab in der Tabcontrol erstellt, mit dem man zu dem Fenster wechseln kann. Dieses hat ja dann eine Titelleiste mit Systemmenü (Minimieren, Maximieren und Schließen). Wird dieses MDI Child Maximiert, wird die Titelleiste automatisch ausgeblendet und das Systemmenü in die Toolbar intigriert. Allerdings sind die 3 Buttons erst sichtbar wenn man mit der Maus drüber fährt. Außerdem bleibt das MDI Child in der gleichen Größe wenn das Hauptfenster maximiert wird, es wird also nicht mit maximiert. Wie kann ich das umgehen? Außerdem hab ich eben festgestellt das ich nicht auf das Tabcontrol zugreifen kann wenn ein MDI Child aktiviert ist, obwohl ich die Tabs sehe. :confused:
  3. Hi, wie bekomme ich es am einfachsten hin das man in einem Richedit Control per Tabtaste den Eingabecursor um eine bestimmte Anzahl Spalten weitersetzt (also so wie in jedem Texteditor)? Gruß Guybrush
  4. Um doch nochmal kurz off topic zu werden. Ich hab nen AthlonXP1700+, 256MB RAM und ne GeForce2 Ti und Far Cry läuft bei mir auf 1024*756 mit niedrigen Details sehr flüssig. Ich habs noch nicht mit höheren Details probiert weils so läuft und auch gut aussieht.
  5. Das sollte mit GetExitCodeProcess funktionieren.
  6. Hmm... Januar 2002, da sollte man doch schon mal nen Blick hierein geworfen haben;)
  7. Guybrush Threepwood

    Arrays

    Naja das hier ist kein Hausaufgabenservice;) Außerdem sollten sich die Fragen mit ein paar Grundkentnissen und einfachen Überlegungen recht schnell lösen lassen. Bei der 2ten Frage musst du dir überlegen welcher Datentyp am passensten wäre um die jeweiligen Daten aufzunehmen. In der 3ten musst du nur jedes Element mit einem Startwert versehen, wofür gewöhnlich die NULL genommen wird.
  8. Ah, vielen Dank:)
  9. Hi, ich muss mich zur Zeit in COBOL einarbeiten und da ist mit was aufgefallen. Wenn ich mir eine Variable für Zahlen anlege mache ich das ja (irgendwie) so: 01 Anzahl PIX9(5). Ich habe gelesen das da intern dann 5 Byte angelegt werden die nur die Zeichen 0-9 enthalten dürfen. Bedeutet das das es in COBOL keine wirklichen Variablen für Zahlen gibt (sowie Integer oder so), sondern alles in Strings bzw. Zeichen gespeichert wird? Das braucht doch viel mehr Speicherplatz und ich kann mir Vorstellen das der PC damit auch sehr viel langsamer rechnet als mit "echten" Zahlen. Gruß Guybrush
  10. Was meinst du mit "n Pointer auf n Pointer zeigt"? Du musst dir das einfach so vorstellen das du verschiedene Elemente in deiner Liste hast. Jedes dieser Elemente hat einen Verweis (Pointer) auf das nächste Element in der Liste und evtl. auch auf das Vorherige.
  11. Womit genau hast du denn Probleme?
  12. Das liegt daran das CurrentIpAddress im Moment nur für evtl. spätere Zwecke eingebaut ist und noch nicht verwendet wird. Versuch mal über IpAddressList an die IP zu kommen.
  13. Die kahm doch, nur halt etwas früher :floet:
  14. Hier wird`s doch bestimmt jemanden geben der dir per PN weiterhelfen kann und dann könnte man ja mal bei dem Kerl klingeln...
  15. pffff das ist aber echt schwach von word;) Danke!
  16. Ich muss zugeben das ich noch nie auf der Seite war;) Ich wollte eigentlich auch nur drauf hinweisen das die Daten halt an ebay usa weitergegeben werden und man sich im klaren sein sollte das die den Datenschutz dort nicht so eng nehmen.
  17. ja so hats geklappt. Danke! und wie bekomme ich es jetzt hin das er bei der Gesamtzahl der Seiten die ersten beiden nicht mit zählt? Ich möcht das nämlich in dem Format 1/10 da stehen haben und im Moment zählt er die ersten beiden Seiten mit so das auf der letzten Seite 10/12 steht.
  18. Hmm ich bekomms trotzdem nicht hin. Ich hab auf der zweiten Seite nach dem Inhaltsverzeichnis einen Abschnittswechsel auf die nächste Seite eingefügt. Dann hab ich in den nächsten Abschnitt geklickt und über einfügen->seitenzahlen die seitenzahlen eingefügt. das hat auch funktioniert, allerdings hat er den ersten abschnitt mit dem deckblatt und dem inhaltsverzeichnis auch nummeriert und wenn ich das in der Fusszeile wegmache dann macht er das überall weg:confused:
  19. Ne soweit bin ich noch nicht, ich bin noch vor der Mission wo diesen Kurzwellenempfänger(?) von dem paraniden kaufen muss. Allerdings will ich erst mal nen Haufen Kohle verdienen:D , dummerweise werd ich oft von piraten und so abgeschossen:( und meine siliziummine und das sonnenkraftwerk haben auch noch nicht den RIESEN Gewinn gebracht. Wie hast du das denn gemacht?
  20. Macht ebay aber (swoweit ich gelesen habe) trotzdem, da deine gesamten Informationen an Ebay USA weitergegeben werden und die dort sehr freizügig damit sind. Also in dem Artikel stand das da ein Parkwärter die Infos anfordern könnte und die dem dann zugefaxt werden. Ob es ganz so extrem ist weiß ich nicht, aber weitergeben werden sie anscheind schon.
  21. Klar ist das möglich, allerdings nicht unter ANSI C/C++ Hmm...ohne MFC wird das aber ziemlich schwierig. Ich hab da mal was mit OLE DB gemacht, aber so 100% durchgestiegen bin ich da nicht... Da gabs nen Artikel in der MSDN, der diesem hier entsprechen müsste. Kannst ihn dir ja mal angucken. Wie gesagt hab nit alles kapiert, aber der Datenbankzugriff hat am Ende funktioniert Gruß Guybrush
  22. Also ich hab mit Visual Studio 7 nur kurz was gemacht, aber es war der 6er Version ser ähnlich aufgebaut. Du müsstest an der Seite deinen Arbeitsbereich sehen, wo du in den Resourceneditor wechseln kannst. Hier wählst ud einfach das Menü aus und fügst an der gewünschten Stehle den gewünschten Menüpunkt ein.
  23. Naja nicht überschrieben, CMFC3App ist ja deine eigene Klasse und an der Stelle kannst du halt definieren was in der InitInstance Methode passieren soll. Braucht es auch, allerdings wirst du die in keiner MFC Anwendung finden, da sie irgendwo intern aufgerufen wird. Ich glaube im Konstruktor von CApp...
  24. Also für mich war es zuviel Code, so dass ich versucht habe direkt mit der Windwos API zu arbeiten. Aber das ist ja reine Geschmackssache Ich hab aber mal, entweder hier oder in einem anderem Forum, gelesen das sich jemand ein Buch gekauft hat indem beschrieben wurde wie man MFC Anwendungen ohne den Assistenten erstellt. Ich weiß leider nicht mehr wie das Buch hieß, aber wenn du ein bischen danach suchst wirst du bestimmt fündig werden. Aber eigentlich kann ich Klotzkopp nur zustimmen wenn er sagt das die MFc eigentlich dafür Gedacht ist (und das man es vorallem sehr viel einfacher damit hat) wenn man die verschiedenen Assistenten benutzt.
  25. Wennn du unbedingt die MFC benutzen willst brauchst du nur den entsprechendne Assistenten zu starten und die einzelnen Schritte durchgehen. Der erstellt dir dann das entsprechende Grundgerüst. IMHO solltest du aber, wenn du es schon ohne Geschaft hast, auch dabei bleiben;)

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