Textausgabe: Zeichen '|' bei Zeilenumbruch

Wenn ich das so jetzt einbaue kriege ich die Fehlermeldung:

....(239): error C2065: 'subtext' : undeclared identifier

Aber nur, wenn ich die for-Schleife eingebaut habe, wenn vorher anzahl=0 ist, dann funktioniert es, und subtext ist deklariert, ob es doch was damit zu tun hat, daß die Länge zur Laufzeit noch nicht klar ist?
 
Das ist doch egal. Dafür gibt's doch dynamische Speicherverwaltung. Sonst hätte man sich malloc und new doch schenken können.
Hast du den Code haargenau übernommen? Sicher das subtext im selben "Block" deklariert wird, in dem es auch benutzt wird?
 
Na klar, hab ich per copy&paste gemacht!

Ansich ist es auch egal, den Text, den ich ausgebe, der hat immer die gleiche Anzahl von '/x0A'! Deswegen kann ich einfach soviel mehr allokieren!

Mich würde natürlich trotzdem interessieren, wie das zustande kommt, denn es könnte ja sein, daß sich die Länge des Textes irgendwann mal verändert!

Und ich verstehe das nicht, der Fehler trifft ein, sobald ich die for-Schleife einbeziehe...
 
Klar:
Code:
if (strcmp(im->sender,"xx")==0){
            int anzahl=0;
            /*for(f=0;f<strlen(im->msg);f++){
                    ptr3=im->msg+f;
                    if(*ptr3=='\x0A')anzahl++;
               }*/


//---> hab auch Deine for-Schleife ausprobiert, das hinterher nur so geändert, 
//weil ich dachte, so funktioniert es vielleicht, weil das ja eigentlich kein Array ist!

               char *subtext = (char*)malloc(sizeof(char)*(strlen(im->msg)+50));
               //char *subtext= (char*)malloc(sizeof(char)*(strlen(im->msg)+anzahl+1));
               memset(subtext,'\0',sizeof(char)*(strlen(im->msg)+50));
               g=strlen(im->msg);
               ptr=im->msg;
               ptr2=subtext;
               for(v=0;v<=g;v++){
                      if (*ptr=='\x0A') {
	          *ptr2='\x0D';
	           ptr2=ptr2++;
	            *ptr2='\x0A';
	            ptr2=ptr2++;
					 		}
	else {
	          *ptr2=*ptr;
	          ptr2=ptr2++;
				
	}
	ptr=ptr++;
              }
 			
             strcat(pChatMessage,subtext);
          
}
	
            else strcat(pChatMessage,im->msg);

also im-> msg ist das, was ich vorher immer als buffer hatte... ;-)

Wenn ich das so nehme, wie oben, dann funktioniert es...
Wenn ich dann das auskommentierte nehme (for-schleife und andere Deklaration von subtext) dann kommt der Fehler...
Wenn ich die andere Deklaration von subtext nehme
Code:
char *subtext= (char*)malloc(sizeof(char)*(strlen(im->msg)+anzahl+1));

und die for-schleife auskommentiert lasse, dann geht es auch, dann ist anzahl halt nur 0!
Es muß also an der for-Schleife liegen, da wird wohl anzahl nicht richtig hochgezähl!
Da kommt auch eine Warnung, irgendwas mit unsigned/signed bei dem Zeichen '<' in der for-schleife!
Ich denke mal, weil ja strlen(im->msg) noch nicht klar ist und auch =0 sein könnte... was ich natürlich besser weiß, und diese Warnung kann eigentlich übergangen werden, is ja auch nur ne Warnung... ;-)
 
Zuletzt bearbeitet:
Du meinst der Compilerfehler (!) tritt nicht auf, wenn du die for-Schleife auskommentierst, aber wenn du sie compilieren lässt schon? Ist vollkommen unmöglich, die Fehler stehen in überhaupt keiner Verbindung. Nochmal zum Verständnis: Wie soll der Compiler denn eine Werteprüfung bei dynamischer Speicherverwaltung durchführen? Dem ist egal, ob Anzahl im Moment des Aufrufes von malloc 0, 1 Million oder -unendlich ist. Malloc ist eine stinknormale Funktion, kannst du prinzipiell selbst schreiben. Wenn mit Anzahl was nicht stimmt wirst du das höchstens zur Laufzeit gesagt bekommen.
Und zu im->msg, subtext und allen anderen char*-Variablen: Sind alles Arrays. Arrays aus char-Variablen. Mit malloc reservierst du n Bytes an der Stelle, auf die die char* Variable zeigt. Zugreifen kannst du mit [ ], wobei variablevomtypx[ i ] gewertet wird zu variablevomtypx + i * sizeof(typx). Deswegen unterscheiden sich char*, int*, float* diesbezüglich auch nicht von char[ ], int[ ] bzw. float[ ], der Unterschied liegt in der Eigenschaft dynamisch oder statisch zu sein. Probier doch mal meine Zeile nochmal aus. Ach so, du brauchst, wenn du mit char arbeitest nicht dieses Escapeflagzeugs benutzen. Meiner meinung nach ist es viel anschaulicher, wenn du einfach die Hexzahl zuweist. Also anstatt = '\x0A' einfach = 0x0A (wobei 0A die Hexzahl ist und 0x deutlich macht, dass die Zahl die nun kommt eben eine solche ist).
Versuch mal meine Zeile nochmal.
 
Also mit den Arrays und dynamischen Variablen hatte ich schon immer meine Probleme... danke für die Erläuterungen!

Also das funktioniert wirklich nicht, wieder der gleiche Fehler!

-->error C2065: 'subtext' : undeclared identifier

Dieser Fehler gilt für die memset-Zeile

Ich kann übrigens auch nicht innerhalb der for-Schleife i deklarieren, das muß ich vorher machen, das versteh ich auch nicht wirklich!

Außerdem bekomme ich noch einen Fehler:

--> error C2143: syntax error : missing ';' before 'type'

Dieser Fehler gilt für die malloc-Zeile;

Ich versteh das echt nicht...

Ich bekomme dann auch noch mehrere Warnungen!

Und wenn ich wirklich nur die for-Schleife auskommentiere kommt noch nicht mal mehr ne Warnung!
 
Lindin, hat das Forum bei Posten eventuell Backslashes ('\') geschluckt oder Slashes ('/')? Kannst du mal den Code als Datei anhängen?

Komische Sache, jedenfalls. :(
 
Benutzt du eigentlich Visual C++? Prinzipiell ist Compiler eigentlich spitze und macht solche seltsamen Fehler nicht (besonders das nicht mögliche Deklarieren einer Zählvariable in der for-Schleife finde ich mehr als seltsam, weil das ja nun wirklich eine gängige Vorgehensweise ist).
 

Neue Beiträge

Zurück