Inhalt einer *.txt || *.log Datei zusenden lassen
-
Hey danke dir

-
Hallo,
Mein Program hängt sich nun ständig auf wenn ich versuche mir das Log in einer ListBox anzeigen zu lassen - ich vermute das ich Buffer overruns erzeuge, nur leider weiss ich nicht wie ich diese vermeiden kann.
const ANZ = 50; char zeilen[ANZ]; char befehl[ANZ] = "read::log\n"; s=Form3->getSocket(); rc=send(s,befehl,strlen(befehl),0); rc=recv(s,zeilen,ANZ,0); for(int i=0;i<10;i++) { Form1->ListBox1->Items->Add(zeilen); }
-
Hey.. wollte den Thread mal pushen vlt. kann mir ja doch jemand helfen

Gruß
Radial
-
Das wirst du gerade noch selbst rausfinden.

-
Hallo,
Radial schrieb:
[...]
const ANZ = 50; // braucht ANZ keinen Datentyp??? char befehl[ANZ] = "read::log\n"; //... rc=send(s,befehl,strlen(befehl),0); //...//... char zeilen[ANZ]; //... for(int i=0;i<10;i++) { Form1->ListBox1->Items->Add(zeilen); }Darf man denn Methoden von TStrings bzw. AnsiString auf char-Arrays anwenden wie in den obigen Beispielen geschehen (strlen(befehl) und ...->Add(zeilen))? Das wäre natürlich sehr bequem und ich hätte wieder was gelernt

MfG
-
Das wirst du gerade noch selbst rausfinden.
Dann hätte ich hier nicht gefragt du Troll!
-
Hallo,
Kolumbus schrieb:
const ANZ = 50; // braucht ANZ keinen Datentyp???Nein, denn wenn der Typspezifizierer fehlt, wird hier int angenommen.
Radial schrieb:
Mein Program hängt sich nun ständig auf wenn ich versuche mir das Log in einer ListBox anzeigen zu lassen - ich vermute das ich Buffer overruns erzeuge, nur leider weiss ich nicht wie ich diese vermeiden kann.
const ANZ = 50; char zeilen[ANZ]; char befehl[ANZ] = "read::log\n"; s=Form3->getSocket(); rc=send(s,befehl,strlen(befehl),0); rc=recv(s,zeilen,ANZ,0); for(int i=0;i<10;i++) { Form1->ListBox1->Items->Add(zeilen); }Bedenke, dass wenn du befehl und zeilen als nullterminierte "Zeichenkette" (im Sender bzw. Empfänger) behandeln willst, dass diese ein zusätzliches Nullbyte am Ende (das z.B. mit übertragen werden kann, wenn nicht, dann muss man aufpassen) haben muss, damit die entsprechenden Operationen, die erst mit dieser "Hilfe" das Ende der Zeichen erkennen, funktionieren. Das Problem kann also durchaus auch auf der Empfängerseite liegen, die wir hier nicht sehen.
MfG,
Probe-Nutzer
-
Probe-Nutzer schrieb:
Hallo,
Kolumbus schrieb:
const ANZ = 50; // braucht ANZ keinen Datentyp???Nein, denn wenn der Typspezifizierer fehlt, wird hier int angenommen.
Nice, Danke! Das sind so die Feinheiten.

Probe-Nutzer schrieb:
Bedenke, dass wenn du befehl und zeilen als nullterminierte "Zeichenkette" ... behandeln willst, dass diese ein zusätzliches Nullbyte am Ende ... haben muss, damit die entsprechenden Operationen ... funktionieren.
Also war meine Vermutung garnicht so falsch, dass die AnsiString- / String-Methoden hier evtl. nicht einfach so eingesetzt werden können, wenn das char-Array nicht kompatibel (nullterminiert) ist!?!
MfG
PS: Was mir grad auffiel zum Thema Methoden: Wenn man(n) sich Honigwein über die Hose kippt, hat er auch Methoden...

-
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "FlowerPower.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //----------------------Konstanten---------------------------------------------- const MAX_POS = 25; //-----------------------Funktionsdeklaration----------------------------------- int wuerfeln(); void initialisiere(); void zieheSpieler (int spieler, int pos); void loescheAlt (int pos); void zuruecksetzen (); //-----------------------Globale Variablen-------------------------------------- int anzSpieler = 0; //Anzahl Spieler int posSp1 = 1; //spieler positionen int posSp2 = 1; int posSp3 = 1; int posSp4 = 1; int scores[4]; int spAktuell; //aktueller spieler int gewuerfelt = 0; //------------------------------------------------------------------------------ TForm1 *Form1; //------------------------------------------------------------------------------ __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::btn_endeClick(TObject *Sender) { //Scores zurücksetzen for(int i=0;i<4;i++) { scores[i] = 0; } Application->Terminate(); } //--------------------------------------------------------------------------- void __fastcall TForm1::btn_startClick(TObject *Sender) { String s; anzSpieler = StrToFloat(this->combo_anzahl->Text); //Anfangsspieler wird durch zufall bestimmt srand(time(NULL)); spAktuell = ( 1 + rand () % anzSpieler); //String Zusammensetzen s = "Bilder/\Spieler" + FloatToStr(spAktuell) + ".bmp"; //Aktuellen Spieler anzeigen Form1->img_spAktuell->Picture->LoadFromFile(s); } //--------------------------------------------------------------------------- void __fastcall TForm1::btn_wuerfelnClick(TObject *Sender) { String s1 = "Spieler " + FloatToStr(spAktuell) + " hat gewonnen!\nNeues Spiel starten?"; String s2; int wurf = 0; wurf = wuerfeln(); switch(spAktuell) { case 1: posSp1 = posSp1 + wurf; if (posSp1!= posSp2 && posSp1 != posSp3 && posSp1!= posSp4) { if(posSp1 < MAX_POS) { loescheAlt(posSp1 - wurf); zieheSpieler(spAktuell,posSp1); //normaler Spielzug } else if(posSp1 == MAX_POS) { //Scores speichern scores[0] = scores[0] + 10; Form1->lbl_spieler1->Caption = FloatToStr(scores[0]); //ein Spieler am Ziel if(Application->MessageBoxA(s1.c_str(),"Spielende", MB_YESNO)== IDYES) { //Spielfeld zurücksetzen zuruecksetzen(); //Spiel neu starten Form1->btn_start->Click(); } else { //Spiel beenden Form1->btn_ende->Click(); } } else { posSp1 = posSp1 - wurf; } } else { Application->MessageBoxA("Spielfeld besetzt\nEinmal aussetzen!Haha!!!", "Besetzt",MB_OK); posSp1 = posSp1 - wurf; } break; case 2: posSp2 = posSp2 + wurf; if (posSp2!= posSp1 && posSp2 != posSp3 && posSp2!= posSp4) { if(posSp2 < MAX_POS) { loescheAlt(posSp2 - wurf); zieheSpieler(spAktuell,posSp2); //normaler Spielzug } else if(posSp2 == MAX_POS) { //Scores speichern scores[1] = scores[1] + 10; Form1->lbl_spieler2->Caption = FloatToStr(scores[1]); //ein Spieler am Ziel if(Application->MessageBoxA(s1.c_str(),"Spielende", MB_YESNO)== IDYES) { //Spielfeld zurücksetzen zuruecksetzen(); //Spiel neu starten Form1->btn_start->Click(); } else { //Spiel beenden Form1->btn_ende->Click(); } } else { posSp2 = posSp2 - wurf; } } else { Application->MessageBoxA("Spielfeld besetzt\nEinmal aussetzen!Haha!!!", "Besetzt",MB_OK); posSp2 = posSp2 - wurf; } break; case 3: posSp3 = posSp3 + wurf; if (posSp3!= posSp1 && posSp3 != posSp2 && posSp3!= posSp4) { if(posSp3 < MAX_POS) { loescheAlt(posSp3 - wurf); zieheSpieler(spAktuell,posSp3); //normaler Spielzug } else if(posSp3 == MAX_POS) { //Scores speichern scores[2] = scores[2] + 10; Form1->lbl_spieler3->Caption = FloatToStr(scores[2]); //ein Spieler am Ziel if(Application->MessageBoxA(s1.c_str(),"Spielende", MB_YESNO)== IDYES) { //Spielfeld zurücksetzen zuruecksetzen(); //Spiel neu starten Form1->btn_start->Click(); } else { //Spiel beenden Form1->btn_ende->Click(); } } else { posSp3 = posSp3 - wurf; } } else { Application->MessageBoxA("Spielfeld besetzt\nEinmal aussetzen!Haha!!!", "Besetzt",MB_OK); posSp3 = posSp3 - wurf; } break; case 4: posSp4= posSp4 + wurf; if (posSp4!= posSp1 && posSp4 != posSp2 && posSp4!= posSp3) { if(posSp4 < MAX_POS) { loescheAlt(posSp4 - wurf); zieheSpieler(spAktuell,posSp4); //normaler Spielzug } else if(posSp4 == MAX_POS) { //Scores speichern scores[3] = scores[3] + 10; Form1->lbl_spieler4->Caption = FloatToStr(scores[3]); //ein Spieler am Ziel if(Application->MessageBoxA(s1.c_str(),"Spielende", MB_YESNO)== IDYES) { //Spielfeld zurücksetzen zuruecksetzen(); //Spiel neu starten Form1->btn_start->Click(); } else { //Spiel beenden Form1->btn_ende->Click(); } } else { posSp4 = posSp4 - wurf; } } else { Application->MessageBoxA("Spielfeld besetzt\nEinmal aussetzen!Haha!!!", "Besetzt",MB_OK); posSp4 = posSp4 - wurf; } break; } //Nächster spieler spAktuell++; if (spAktuell > anzSpieler) { spAktuell = 1; } s2 = "Bilder/\Spieler" + FloatToStr(spAktuell) + ".bmp"; //Aktuellen Spieler anzeigen Form1->img_spAktuell->Picture->LoadFromFile(s2); } //--------------------------------------------------------------------------- //Zufallszahl zwischen 1 und 6 int wuerfeln() { int x; //startwert (systemzeit-> immer anderer wert), legt alle zahlen in der folge fest srand(time(NULL)); //generiere zufallszahl x = ( 1 + rand () % 6); Form1->lbl_zahl->Caption = FloatToStr(x); return x; } //----------------------------------------------------------------------------- //Spieler um die gewürfelte Zahl ziehen void zieheSpieler (int spieler, int pos) { //String Zusammensetzen String s; s = "Bilder/\Spieler" + FloatToStr(spieler) + ".bmp"; switch(pos) { case 1: //Spielerfläche von 1. Feld mit Spieler Image belegen Form1->img_1->Picture->LoadFromFile(s); Form1->img_1->Visible = true; break; case 2: //Spielerfläche von 2. Feld mit Spieler Image belegen Form1->img_2->Picture->LoadFromFile(s); Form1->img_2->Visible = true; break; case 3: //Spielerfläche von 3. Feld mit Spieler Image belegen Form1->img_3->Picture->LoadFromFile(s); Form1->img_3->Visible = true; break; case 4: //Spielerfläche von 4. Feld mit Spieler Image belegen Form1->img_4->Picture->LoadFromFile(s); Form1->img_4->Visible = true; break; case 5: //Spielerfläche von 5. Feld mit Spieler Image belegen Form1->img_5->Picture->LoadFromFile(s); Form1->img_5->Visible = true; break; case 6: //Spielerfläche von 6. Feld mit Spieler Image belegen Form1->img_6->Picture->LoadFromFile(s); Form1->img_6->Visible = true; break; case 7: //Spielerfläche von 7. Feld mit Spieler Image belegen Form1->img_7->Picture->LoadFromFile(s); Form1->img_7->Visible = true; break; case 8: //Spielerfläche von 8. Feld mit Spieler Image belegen Form1->img_8->Picture->LoadFromFile(s); Form1->img_8->Visible = true; break; case 9: //Spielerfläche von 9. Feld mit Spieler Image belegen Form1->img_9->Picture->LoadFromFile(s); Form1->img_9->Visible = true; break; case 10: //Spielerfläche von 10. Feld mit Spieler Image belegen Form1->img_10->Picture->LoadFromFile(s); Form1->img_10->Visible = true; break; case 11: //Spielerfläche von 11. Feld mit Spieler Image belegen Form1->img_11->Picture->LoadFromFile(s); Form1->img_11->Visible = true; break; case 12: //Spielerfläche von 12. Feld mit Spieler Image belegen Form1->img_12->Picture->LoadFromFile(s); Form1->img_12->Visible = true; break; case 13: //Spielerfläche von 13. Feld mit Spieler Image belegen Form1->img_13->Picture->LoadFromFile(s); Form1->img_13->Visible = true; break; case 14: //Spielerfläche von 14. Feld mit Spieler Image belegen Form1->img_14->Picture->LoadFromFile(s); Form1->img_14->Visible = true; break; case 15: //Spielerfläche von 15. Feld mit Spieler Image belegen Form1->img_15->Picture->LoadFromFile(s); Form1->img_15->Visible = true; break; case 16: //Spielerfläche von 16. Feld mit Spieler Image belegen Form1->img_16->Picture->LoadFromFile(s); Form1->img_16->Visible = true; break; case 17: //Spielerfläche von 17. Feld mit Spieler Image belegen Form1->img_17->Picture->LoadFromFile(s); Form1->img_17->Visible = true; break; case 18: //Spielerfläche von 18. Feld mit Spieler Image belegen Form1->img_18->Picture->LoadFromFile(s); Form1->img_18->Visible = true; break; case 19: //Spielerfläche von 19. Feld mit Spieler Image belegen Form1->img_19->Picture->LoadFromFile(s); Form1->img_19->Visible = true; break; case 20: //Spielerfläche von 20. Feld mit Spieler Image belegen Form1->img_20->Picture->LoadFromFile(s); Form1->img_20->Visible = true; break; case 21: //Spielerfläche von 21. Feld mit Spieler Image belegen Form1->img_21->Picture->LoadFromFile(s); Form1->img_21->Visible = true; break; case 22: //Spielerfläche von 22. Feld mit Spieler Image belegen Form1->img_22->Picture->LoadFromFile(s); Form1->img_22->Visible = true; break; case 23: //Spielerfläche von 23. Feld mit Spieler Image belegen Form1->img_23->Picture->LoadFromFile(s); Form1->img_23->Visible = true; break; case 24: //Spielerfläche von 24. Feld mit Spieler Image belegen Form1->img_24->Picture->LoadFromFile(s); Form1->img_24->Visible = true; break; case 25: //Spielerfläche von 25. Feld mit Spieler Image belegen Form1->img_25->Picture->LoadFromFile(s); Form1->img_25->Visible = true; break; } } //--------------------------------------------------------------------------- void loescheAlt (int pos) { switch(pos) { case 1: //Altes Spielfeld wird ausgeblendet Form1->img_1->Visible = false; break; case 2: //Altes Spielfeld wird ausgeblendet Form1->img_2->Visible = false; break; case 3: //Altes Spielfeld wird ausgeblendet Form1->img_3->Visible = false; break; case 4: //Altes Spielfeld wird ausgeblendet Form1->img_4->Visible = false; break; case 5: //Altes Spielfeld wird ausgeblendet Form1->img_5->Visible = false; break; case 6: //Altes Spielfeld wird ausgeblendet Form1->img_6->Visible = false; break; case 7: //Altes Spielfeld wird ausgeblendet Form1->img_7->Visible = false; break; case 8: //Altes Spielfeld wird ausgeblendet Form1->img_8->Visible = false; break; case 9: //Altes Spielfeld wird ausgeblendet Form1->img_9->Visible = false; break; case 10: //Altes Spielfeld wird ausgeblendet Form1->img_10->Visible = false; break; case 11: //Altes Spielfeld wird ausgeblendet Form1->img_11->Visible = false; break; case 12: //Altes Spielfeld wird ausgeblendet Form1->img_12->Visible = false; break; case 13: //Altes Spielfeld wird ausgeblendet Form1->img_13->Visible = false; break; case 14: //Altes Spielfeld wird ausgeblendet Form1->img_14->Visible = false; break; case 15: //Altes Spielfeld wird ausgeblendet Form1->img_15->Visible = false; break; case 16: //Altes Spielfeld wird ausgeblendet Form1->img_16->Visible = false; break; case 17: //Altes Spielfeld wird ausgeblendet Form1->img_17->Visible = false; break; case 18: //Altes Spielfeld wird ausgeblendet Form1->img_18->Visible = false; break; case 19: //Altes Spielfeld wird ausgeblendet Form1->img_19->Visible = false; break; case 20: //Altes Spielfeld wird ausgeblendet Form1->img_20->Visible = false; break; case 21: //Altes Spielfeld wird ausgeblendet Form1->img_21->Visible = false; break; case 22: //Altes Spielfeld wird ausgeblendet Form1->img_22->Visible = false; break; case 23: //Altes Spielfeld wird ausgeblendet Form1->img_23->Visible = false; break; case 24: //Altes Spielfeld wird ausgeblendet Form1->img_24->Visible = false; break; case 25: //Altes Spielfeld wird ausgeblendet Form1->img_25->Visible = false; break; } } //------------------------------------------------------------------------------ //Spielfeld zurücksezten void zuruecksetzen () { Form1->img_1->Visible = false; Form1->img_2->Visible = false; Form1->img_3->Visible = false; Form1->img_4->Visible = false; Form1->img_5->Visible = false; Form1->img_6->Visible = false; Form1->img_7->Visible = false; Form1->img_8->Visible = false; Form1->img_9->Visible = false; Form1->img_10->Visible = false; Form1->img_11->Visible = false; Form1->img_12->Visible = false; Form1->img_13->Visible = false; Form1->img_14->Visible = false; Form1->img_15->Visible = false; Form1->img_16->Visible = false; Form1->img_17->Visible = false; Form1->img_18->Visible = false; Form1->img_19->Visible = false; Form1->img_20->Visible = false; Form1->img_21->Visible = false; Form1->img_22->Visible = false; Form1->img_23->Visible = false; Form1->img_24->Visible = false; posSp1 = 1; posSp2 = 1; posSp3 = 1; posSp4 = 1; }
-
Aha!
