Die Lezten drei / vier zeichen bekommen???



  • Hey,

    Moin. Ich weis zwar wie ich die ersten X zeichen eines Strings bekomme aber wie die letzten X ???



  • ermm.. wie wärs mit:

    char *sub_str;
    const char *whole_str;
    ...
    int i; // ab zeichen X
    strcpy(sub_str,&whole_str[i]);
    


  • Danke



  • Original erstellt von CMatt:
    strcpy(sub_str,&whole_str[i]);

    Ist zwar jetzt Haarspalterei, aber wäre hier nicht:
    lstrcpy(sub_str,whole_str+i);
    besser?

    oder gleich (sofern man nichts verändern will:

    char *sub_str;
    const char *whole_str;
    ...
    sub_str = whole_str+i;
    


  • Ich hab mir die Strings beim Code von CMatt angesehen und dort wurde nichts verändert.



  • @sarfuan
    1. lstrcpy kann NICHT verwendet werden, da es sich um char, und nicht um TCHAR handelt

    2. char* sub_str = const_whole_str+i funzt sicherlich auch net!
    Wennschon dann:
    const char* sub_str ...



  • **

    sub_str = whole_str+i;
    

    **

    Niemals nie versuche man das so!

    Spontan würd ich das so machen:

    TCHAR *source = TEXT("yes baby, you got it");
    int count = 8;
    int pos = _tcslen(source) - count;
    
    TCHAR *dest = (TCHAR *) malloc(pos*sizeof(TCHAR));
    
    _tcscpy(dest, source + pos); // in dest steht jetzt "u got it"
    
    free(dest);
    


  • Das ist eine gut Lösung.



  • Original erstellt von RenéG:
    @sarfuan
    1. lstrcpy kann NICHT verwendet werden, da es sich um char, und nicht um TCHAR handelt

    Und was hat das eine mit dem anderen zu tun? Wenn es nicht verwendet werden kann, dann frag ich mich, wieso meine Programme laufen 😃
    TCHAR kann sowohl ASCII als auch Unicode sein (hängt davon ab, ob man als Unicode kompiliert oder nicht) und lstrcpy gibt's ebenfalls als ASCII und Unicode-Variante (hängt vom selben define ab). Es funktioniert also sehr wohl ... und zwar ohne Probleme.

    2. char* sub_str = const_whole_str+i funzt sicherlich auch net!

    const hab ich übersehen.

    @kwoTx:
    Was spricht gegen "sub_str = whole_str+i" ?
    Ich sehe kein Problem, außer, dass man Speicher spart. Wo siehst du das Problem? Ist doch read-only. Also wo ist das Problem?

    P.S.: Dein spontaner Vorschlag ist kein WinAPI.
    P.P.S.:
    würde "TCHAR *dest = (TCHAR 😉 malloc((count+1)*sizeof(TCHAR));" nicht mehr Sinn machen?

    [ Dieser Beitrag wurde am 08.11.2002 um 16:51 Uhr von sarfuan editiert. ]



  • Original erstellt von sarfuan:
    @kwoTx:
    Was spricht gegen "sub_str = whole_str+i" ?
    Ich sehe kein Problem, außer, dass man Speicher spart. Wo siehst du das Problem? Ist doch read-only. Also wo ist das Problem?

    Einem char* direkt etwas zuzuweisen, sollte man sich imho gar nicht erst angewöhnen. Hier funktioniert es, ich bin trotzdem dagegen :p

    *P.P.S.:
    würde "TCHAR *dest = (TCHAR 😉 malloc((count+1)sizeof(TCHAR));" nicht mehr Sinn machen?

    Doch, Denkfehler meinerseits.

    P.S.: Dein spontaner Vorschlag ist kein WinAPI.

    Die meisten Entwickler vergessen einen sehr wichtigen Punkt, nämlich dass die C-Laufzeitbibliothek von Microsoft der Laufzeitbibliothek für Standard-ANSI C entspricht. ANSI C schreibt vor, dass die C-Laufzeitbibliothek Unicode-Zeichen und Unicode-Zeichenfolgen unterstützt. Infogedessen können Sie stets Funktionen der C-Laufzeitbibliothek aufrufen, um Unicode-Zeichen oder -Zeichenfolgen zu bearbeiten (auch wenn die Anwendung unter Windows 98 ausgeführt wird). (J.Richter)
    Meine Verwendung dieser Funktionen hatte an dieser Stelle keinen besonderen Grund. Wem es so nicht gefällt, kann getrost die l-Versionen von str... verwenden.


Anmelden zum Antworten