umwandeln von Tchar* nach Tchar[]



  • brian_t schrieb:

    wäre das dann nicht das gleiche ??

    Nein. Zu keinem Zeitpunkt steht in mystring der gesamte Dateiinhalt, sondern immer nur eine einzige Zeile. Dass du bei Ausgabe auf die Konsole (tprintf usw) trotzdem die ganze Datei siehst, liegt daran, dass du nach dem Einlesen jeder Zeile die Ausgabefunktion aufrufst, und dass die Konsole eben auch alte Ausgaben weiter anzeigt.

    Dein Fenster tut das nicht. WM_PAINT bedeutet, dass das Fenster neu gezeichnet werden muss. Damit werden alte Ausgaben gelöscht.

    Außerdem passiert das überhaupt erst dann, wenn deine Einleseschleife abgeschlossen ist, und damit die letzte Zeile in mystring steht.

    Wenn du den ganzen Text sehen willst, musst du auch den ganzen Text in einer Variablen vorhalten, nicht nur eine Zeile.



  • ok danke, gut zu wissen 🙂
    dann mach ich mich mal auf die suche nach einer art wie ich den kompletten text in meine variable bekomme.

    also so, wie ich es jetzt mache geht es dann ja wohl schonmal nicht (fgets)
    mit fscanf hab ich es auch schonmal probiert. damit geht es auch nicht.
    und der iostream steht mir mit embedded visual studio nicht zur verfügung.

    naja.. ich werde erstmal suchen 🙂 .. danke dir !!



  • versuche jetzt den text komplett in mystring zu schreiben. ist laut code, fuer mich jedenfalls, auch einleuchtend. jedoch hängt sich mein programm nach aufrufen der funktion auf.

    entdeckt ihr einen fehler ??

    FILE* fp;
      int i = 0;
      TCHAR buf[1024];
      TCHAR *c;
    .....
    
    fp=_tfopen(_T("My Documents/scan.txt"),_T("r"));
    
    if (fp != NULL){
    	while(i<255 && _fgetts(buf, 1023, fp)){
    
             _tcscpy(mystring[i], buf);
    
            i++;
    	}
    }
    
    fclose(fp);
    


  • Hallo,

    brian_t schrieb:

    entdeckt ihr einen fehler ??

    Nein, aber vielleicht liegt es daran, wie mystring definiert wurde. Um Zeichenketten hintereinander zusammen zu fügen, kann man übrigens auf str(n)cat zurückgreifen...

    MfG,

    Probe-Nutzer



  • also es liegt auf jeden fall an der zeile.

    mystring wurde so definiert: TCHAR* mystring [1024];



  • ich habs so versucht. jedoch bekomme ich dann einen fehler:

    strcat(mystring[i], *buf);
    

    error C2664: 'strcat' : cannot convert parameter 1 from 'unsigned short *'
    to 'char *'

    also das funktioniert auch nicht so ohne weiteres. !?!?

    warum ist das nur so schwer 😕



  • _tcscat( mystring, buf )
    

    Wenn du mystring vorher mit '\0' initialisiert hast.



  • also ich versuche mich ja wirklich nicht dumm anzustellen 😕 .. aber irgednwie klappt das nicht.

    initialisieren mit '\0':

    --> TCHAR* mystring [1024] = _T('\0');;
    --> Fehler: cannot convert from 'const unsigned short' t
    o 'unsigned short *[1024]'

    vorschlag: _tcscat( mystring, buf );

    --> fehler: cannot convert parameter 1 from 'unsigned short *[
    1024]' to 'unsigned short *'

    ich hoffe ihr habt noch geduld mit mir !!

    danke euch vielmals !



  • brian_t schrieb:

    --> TCHAR* mystring [1024] = _T('\0');;

    Ach, mystring ist jetzt ein Array von TCHAR-Zeigern? Das hättest du erwähnen müssen.
    Du musst aber nicht jede Zeile in einem eigenen Puffer speichern.

    Wenn du das aber tun willst, musst du für jede Zeile einzeln Speicher reservieren.



  • ne ich muss nicht reservieren oder sonstiges.. das einzige was ich möchte ist. das ich den text aus der datei auslesen kann und ihn (komplett) in einer TCHAR variablen ablegen kann.

    damit ich ihn mit Drawtext ausgeben kann. bei meinem alten code habe ich die variable immer wieder überschrieben und hatte somit nur den letzten wert in der variable.

    also alles muss rein. egal wie. aber scheint ja nicht so einfach zu sein 😕

    hast du noch ne idee ??

    danke dir !



  • brian_t schrieb:

    ne ich muss nicht reservieren oder sonstiges..

    Doch, musst du bei einem Array von Zeigern. Die sind sonst uninitialisert, d.h. sie zeigen irgendwo hin.

    brian_t schrieb:

    das einzige was ich möchte ist. das ich den text aus der datei auslesen kann und ihn (komplett) in einer TCHAR variablen ablegen kann.

    In eine TCHAR-Variable passt genau ein Zeichen. Könnte knapp werden. Du wirst schon ein Array brauchen.

    brian_t schrieb:

    also alles muss rein. egal wie. aber scheint ja nicht so einfach zu sein 😕

    Doch, eigentlich schon. Du hast schon zu viel geändert. Lass mystring wie es war, als Array von TCHAR, mach es groß genug, dass die ganze Datei reinpasst, initialisier es ordentlich, und dann benutz _tcscat.



  • ok.. soweit hab ich alles denke ich. nur bei dem initialisieren weiss ich nicht weiter. denke auch das da der grund liegt warum mein programm immer abstürzt.

    TCHAR* mystring  [1500];
    ....
     FILE* fp;
      int i = 0;
      TCHAR buf[1500];
      TCHAR *c;
    
      fp=_tfopen(_T("My Documents/scan.txt"),_T("r"));
    
    	if (fp != NULL){
    
    		while(_fgetts(buf,sizeof buf,fp))
    		{
    			_tcscat(mystring[i], buf);	
    		} 
    	}
    fclose(fp);
    

    ich kenne die initialisierung von array nur so.. und anders habe ichs im netz auch nicht gefunden:

    test[3] = {1,2,3};

    aber wie soll ich das ganze mit 1500 zeichen initialisiern ? oder ne schleife basteln die durchläuft?

    danke !!



  • TCHAR ist immer noch ein Array von Zeigern. Und lass den Quatsch mit [i].

    TCHAR mystring [1500] = _T("");
    


  • jau wunderbar 🙂 läuft !!

    brauch noch ne ganz kurze info.. wollts eig selbst lösen. aber so recht scheint das nicht zu klappen.

    also der funktionsaufruf zum auslesen der datei kommt ziemlich oft. und momentan schreibt er ja immer wieder was dran an mystring. also läuft die variable voll und das programm stürzt ab.

    was ist sinnvoller. die variable global zu lassen und nach der ausgabe über drawtext das tchar array zu löschen. (wenn ja wie lösch ich das ^^).

    oder sinnvoller die variable in der funktion jedes mal neu zu initialisieren und mystring über return zurück zu geben ?

    danke !!



  • brian_t schrieb:

    also der funktionsaufruf zum auslesen der datei kommt ziemlich oft.

    Muss er das denn? Sprich: Ändert sich der Dateiinhalt?

    brian_t schrieb:

    und momentan schreibt er ja immer wieder was dran an mystring. also läuft die variable voll und das programm stürzt ab.

    Dann "lösch" das Arrays vorher wieder:

    mystring[0] = '\0';
    

    brian_t schrieb:

    was ist sinnvoller. die variable global zu lassen und nach der ausgabe über drawtext das tchar array zu löschen.

    Löschen nach der Ausgabe ist Blödsinn. Lösch vor dem nächsten Einlesen.

    brian_t schrieb:

    oder sinnvoller die variable in der funktion jedes mal neu zu initialisieren und mystring über return zurück zu geben ?

    Arrays können nicht Rückgabewerte sein.



  • perfekt !
    wieder was dazu gelernt 🙂

    VIELEN DANK !!!

    hätte ich sonst nie geschafft 😘 !!!

    danke, danke 🙂


Anmelden zum Antworten