char zerschnipseln (mid like) Codeoptimierung



  • hi leute,
    ich bastel an einer casyncsocket ftp anwendung.
    Ich bekomme wenn ich in den Passivmode gehe folgenden String:(Beispiel)
    (192,168,11,55,32,555)

    Bisher habe ich das ganze über einen CString gemacht und mit .Mid zerschnippselt.
    Da ich das ganze aber Speicheroptimieren möchte, würde ich das gerne mit einem char machen ( da der CString ja gleich 65Kbyte belegt ).
    Funktionen wie strrchr strpsn und so weiter funktionieren, ich habe nur das Problem das ich nicht : Von Position - BisPosition oder VonPosition - Länge
    kopieren kann.
    Wie würdet ihr da vorgehen?
    Vielen Dank im voraus!
    Bye



  • Hast du es mal mit STL (std::string) probiert ?!!



  • stl sagt mir leider garnix, hab grad mal in der Hilfe nachgesehen und festgestellt das man da wieder was includen muss, beinhaltet wohl funktionen wie runden usw.

    ich könnte es doch so machen
    (192,168,11,55,32,555)

    erstmal die erste klammer entfernen

    int i=0;
    int ilen=0;
    char komplettchar[255];
    char formatiertchar[255];
    char chrteil1[3];
    
    komplettchar[1]=0;
    formatiertchar[1]=0;
    chrteil1[1]=0;
    
    //Kopieren und letzte Klammer entfernen
    strncpy(komplettchar,"(192,168,11,55,32,555)",21);
    komplettchar[21]=0;
    iLen=strlen(komplettchar];
    // Erste Klammer entfernen
    for (i=0;i<iLen;i++)
    {
      strcat(formatiertchar[i],komplettchar[i+1]);
    }
    //Jetzt müsste der formatiertchar so aussehen: 192,168,11,55,32,555
    
    //Die erste kommaposition finde ich jetzt 
    i=strcnps(formatiertchar,",");
    strncpy(chrteil1,formatiertchar,3);
    
    //Das letzte komma könnte ich mit strrchr finden, aber die anderen?
    //Vorallem könnte ich das ganze dann in eine Schleife setzen!
    


  • oder mal sscanf anschauen...



  • Aber mit sscanf kann ich zwar kopieren, aber das argument steht doch für das format.
    z.B. wenn ich nen Integer von 1044 habe und den in nen char kopieren will, kann ich folgendes machen:

    char mychar[255];
    int i=1044;
    mychar[1]=0;
    
    sscanf(mychar,"%s",i);
    

    Aber mit vonpos bispos hat das nix zu tun, oder?



  • Und was hat das dann mit der MFC zu tun. Das ist reines C.



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum ANSI C verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • Unix-Tom schrieb:

    Und was hat das dann mit der MFC zu tun. Das ist reines C.

    Also irgendwie verstehe ich das nicht ganz.
    Ich entwickle mit der MFC, habe als entwicklungssystem Microsoft Visual Studio (Visual c++ 6.0).
    Warum das jetzt in ANSI C verschoben wird?
    Ich wollte jedenfalls nur zur Speicheroptimierung keine CStrings mehr verwenden. Und bin auf der Suche nach einer funktion oder einer möglichkeit ein chararray ähnlich wie mit der CString (mid) funktion zu zerschneiden.
    Und wie ich die funktion sscanf dazu bringen kann einen char zu zerstückeln verstehe ich auch nicht wirklich.
    Die Aussage (Das ist ansi c) verwirrt mich noch mehr, denn soll ich in der mfc denn nicht auf funktionen wie strstr oder strcat usw. zurückgreifen?
    danke
    😕



  • also nach ansi-c passt es deshalb weil du in deinem geposteten abschnitt nur ansi-c verwendet hast...

    und zu sscanf (das ich erwähnt hab weil dein code ansi-c-like aussah)...

    beispiel

    int part_of_ip[4];
    char ip[]="(1.2.3.4)";
    sscanf(ip,"(%d.%d.%d.%d)",&part_of_ip[0],&part_of_ip[1],&part_of_ip[2],&part_of_ip[3]);
    


  • 10000 Dank @ Windalf, hat super geklappt!!!


Anmelden zum Antworten