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