CString Problem



  • Hallo,

    ich habe das Problem dass bei folgendem Quellcode ab dem 223. Schleifendurchlauf strRD keine Zeichen mehr aufnimmt. Die Schleife läuft natürlich noch weiter strD wandelt auch noch brav int Werte in Zeichen um, aber aus irgend einem Grund hört strRD ab dem 223. Schleifendurchlauf einfach auf zu wachsen. Sieht jemand einen Fehler den ich gemacht haben könnte? Laut einer Internetseite soll ein Objekt der Klasse CString "maximal INT_MAX = 2.147.483.647 Zeichen speichern". Also denke ich nicht dass ich das Objekt mit meinen 300 Zeichen überfordere. y ist übrigens immer ein einstelliger int Wert.

    CString strD[300];
    CString strRD;
    
    for (int j = 0; j < 300; j++)
    {
        strD[j].Format("%d", y[j]);
    
        if (j==14||j==29||j==44||j==59||j==74||j==89||j==104||
    	j==119||j==134||j==149||j==164||j==179||j==194||
    	j==209||j==224||j==239||j==254||j==269||j==284||j==299)
            strRD += strD[j]+"\r\n";
        else
    	strRD += strD[j];
    }
    

    Danke schonmal für die Hilfe.



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • was soll das?

    if (j==14||j==29||j==44||j==59||j==74||j==89||j==104||
        j==119||j==134||j==149||j==164||j==179||j==194||
        j==209||j==224||j==239||j==254||j==269||j==284||j==299)
    

    sollts das nicht auch tun?

    if(j%15==14)
    

    lg lolo



  • 😃 hihi, danke. Danach suche ich schon lange. Mit den Modulo kann ich nicht so gut. *peinlich berührt*

    Aber leider ist das ja nicht mein eigentliches Problem gewesen, bzw. ändert das nichts an meinem Problem.

    Trotzdem natürlich Danke!



  • Hat keiner eine Idee was ich da falsch mache? Oder wollt ihr mir jetzt nicht mehr helfen weil ich zu doof bin eine richtige if Abfrage zu schreiben? 😉



  • geraten:
    Vielleicht kommt da ne Null rein die den string terminiert, ohne die Ausgangsdaten zu kennen is da eigentlich nix zu sehn. Aber du kannst doch einfach mal im Debugmodus schaun was kommt wenn er am besagten 223. Schleifendurchlauf ist.



  • kenn mich leider mit dem CString nicht aus, hab dir mal ein kleines beispiel in ansi c gebastelt

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
    	                     //.-2 falls du den kommentar der '\r' zeile entfernst
    	                     //v
    	char str[300+((300/15)*1)+1];
    	//waere falsch, da dann das char ueberlaeuft...
    	//unsigned char strD[300];
    	unsigned strD[300];
    	char *s = str;
    	int j;
    	for (j = 0; j < 300; j++)
    	{
    	    strD[j] = j;
    	}
    	for (j = 0; j < 300; j++)
    	{
    	    sprintf(s++,"%d",strD[j]%10);
    	    if(j%15==14){
    	    	//*s++ = '\r';
    	    	*s++ = '\n';
    	    }
    	}
    	*s = 0;
    	printf("%s",str);
    	return 0;
    }
    

    lg lolo



  • sowas sollte natürlich auch gehen, wenns nur eine zahl ist

    *s++ = '0'+(strD[j]%10);
    statt
      sprintf(s++,"%d",strD[j]%10);
    


  • CTecS schrieb:

    geraten:
    Vielleicht kommt da ne Null rein die den string terminiert, ohne die Ausgangsdaten zu kennen is da eigentlich nix zu sehn. Aber du kannst doch einfach mal im Debugmodus schaun was kommt wenn er am besagten 223. Schleifendurchlauf ist.

    Also debugged hab ich das natürlich schon. Es werden ja von Haus aus nur 0er und 1er (integer) in den String geschrieben. Immer nach dem 15. Zeichen wird ein "\r\n" eingefügt damit der ganze String im Editfeld zu sehen ist.
    Ich habe jetzt mal das "\r" entfernt und nur ein "\n" nach jedem 15. Zeichen einfügen lassen. Dann fügt er bis zum 236. Schleifendurchlauf Zeichen hinzu und hört dann auf.
    Wenn ich keinen Zeilenumbruch einfüge fügt er bis zum 251. Schleifendurchlauf Zeichen hinzu und hört dann auf.

    Das ist doch irgendwie seltsam.

    In strRD steht im 224. Schleifendurchlauf folgendes:

    {"110010000011111
    110101001001001
    101010111011011
    011101001111110
    010000000001010
    001101100000010
    010110001111100
    010101100011110
    001011101000100
    011111111111010
    000010010101010
    111001000010100
    101100001101011
    101101011011001
    00011011111101"
    

    Als nächstes würde eine "0" angefügt werden, diese wird aber nicht mehr angehängt.



  • Ich denke ich habe das Problem gelöst. So wie es aussieht kann der Debugger einfach keinen längeren String anzeigen. Ich hab eine Konsolenanwendung geschrieben und dann in der Ausgabe die Stellen gezählt. Da ist es richtig. Also hoffe ich jetzt mal es stimmt. So ein Spaß. 😃


Anmelden zum Antworten