Anzeige:
Ergebnis 1 bis 12 von 12

Thema: |C| gibts noch was anderes als sprintf ?

  1. #1
    Registrierter Benutzer Avatar von Sector1379
    Registriert seit
    04.10.2005
    Ort
    KR
    Beiträge
    89

    |C| gibts noch was anderes als sprintf ?

    Hallo mal wieder ich

    Also jetzt habe ich das Problem das ich einen String zusammen setzen will aus mehreren Variablen.

    Code:
    sprintf(buf,"zum beispiel %s und %s", var1, var2);
    Leider mußte ich festellen das man mit dieser Funktion nur eine Variable übergeben kann.
    gibts noch eine andere Funktion um dies zu realiesiren?!
    Gruß Sector

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Inwiefern nur eine Variable?
    Willst du gleichzeitig in zwei Puffer schreiben?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von Sector1379
    Registriert seit
    04.10.2005
    Ort
    KR
    Beiträge
    89
    Also es ist so.

    Ich muß einen String zusammen setzen aus vier Faktoren. das soll nacher so aussehen.

    So muß nachher der String formatiert sein. Wobei "1234" "name" "archive" Variabeln sind. wichtig ist auch das es so zusammenhängent ist weil ich per system call nachher den string so verarbeiten muß.
    Code:
    1234-name-1234-archiv
    Diesen Sting muß ich dann in einem buffer arry haben. um ihn dann weiter verarbeiten zukönnen.
    Und ich dachte das kann man mit sprintf() lösen.

    Aber leider war dem nicht so. Jetzt suche ich eine möglickeit wie dies möglich wäre.
    Gruß Sector

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Was genau geht da nicht? Grundsätzlich sollte sprintf genau das machen was du willst.

    Allerdings solltest du besser snprintf verwenden, weil du dort angeben kannst wie gross dein "buf"-Char-Array ist und er dann entsprechend nicht darüber hinaus schreibt wenn mal der Inhalt zu gross wäre.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer Avatar von Sector1379
    Registriert seit
    04.10.2005
    Ort
    KR
    Beiträge
    89
    Hallo

    Allerdings solltest du besser snprintf verwenden, weil du dort angeben kannst wie gross dein "buf"-Char-Array ist und er dann entsprechend nicht darüber hinaus schreibt wenn mal der Inhalt zu gross wäre.
    Also das mit dem buf habe ich schon an Drei Stellen abgesichert. Da kann nix mehr passieren, weil der User gar nicht mehr Zeichen eingeben kann.


    Was genau geht da nicht? Grundsätzlich sollte sprintf genau das machen was du willst.
    Also wenn ich folgendes mache:
    Code:
    sprintf(buf,"%d-%s-%s-%d", var1, var2, var3, var4);
    wird nur die erste Variable verarbeitet der Rest bleibt leer.
    Gruß Sector

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Code:
    #include <stdio.h>
    
    int main()
    {
            char buf[100];
            int var1 = 123;
            char *var2 = "Bla";
            char *var3 = "Blubb";
            int var4 = 456;
            sprintf(buf,"%d-%s-%s-%d", var1, var2, var3, var4);
    
            printf("%s\n", buf);
    }
    Macht bei mir genau das was es soll.

    Code:
    peschmae@sid:/tmp$ ./test 
    123-Bla-Blubb-456
    peschmae@sid:/tmp$
    Ich behaupte jetzt mal der Fehler liegt anderswo. Wie wärs mit nem Stück Code wo der Fehler auftritt das etwas länger ist als nur die sprintf Anweisung?

    @snprintf/sprintf: Ok, dann geht das. Wenn du dort nix falsch gemacht hast - aber schaden tut snprintf ja trotzdem nicht - doppelt genäht hält meist besser

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Registrierter Benutzer Avatar von Sector1379
    Registriert seit
    04.10.2005
    Ort
    KR
    Beiträge
    89
    Hi

    Also erst mal danke für deine Hilfe. Ich habe meine Fehler gefunden ich hatte im String noch eine && Anweisung das hat sprintf() nicht verkraftet.

    Ich habe schon wieder ein neues Problem. Aber ich trau mich kaum wieder einen neuen Thread aufzumachen. Ich meine die letzten 3 gehören ja schon mir
    Gruß Sector

  8. #8
    Registrierter Benutzer Avatar von Caveman
    Registriert seit
    03.11.2005
    Ort
    Geilsheim
    Beiträge
    308
    Mach ruhig weiter. Sind interessante Probleme.
    Programmiere (wenn es denn mal wieder vorkommt) in C, C++, Java, Perl
    Bin kein Student (Elektrotechnik) mehr und habe die Seiten gewechselt von der Software weg hin zur Hardware

  9. #9
    Registrierter Benutzer Avatar von Sector1379
    Registriert seit
    04.10.2005
    Ort
    KR
    Beiträge
    89
    Zitat Zitat von Caveman
    Mach ruhig weiter. Sind interessante Probleme.
    Hey das ist mal nett zu hören ich dachte schon ich nerve.
    Gruß Sector

  10. #10
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    sprintf soll nicht mehr verwendet werden, da es keinen Grund gibt, dieses zu verwenden.

    Gruss, Andy

  11. #11
    Registrierter Benutzer
    Registriert seit
    04.05.2005
    Ort
    Dortmund
    Beiträge
    31
    Zitat Zitat von RapidMax
    sprintf soll nicht mehr verwendet werden, da es keinen Grund gibt, dieses zu verwenden.

    Gruss, Andy
    Wieso?!

    Mfg, Lord Kefir

  12. #12
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von Lord Kefir
    Wieso?!

    Mfg, Lord Kefir
    sprintf() ist potenziell unsicher, man sollte unbedingt snprintf verwenden. Schande das es überhaupt sprintf() und gets() gibt!

    Siehe Bugs bei man gets, das selbe sollte so für sprintf() gelten. Es stimmt zwar das man wenn man einen string füllt ja eh weiß wie groß der wird, aber sicher ist sicher. Was wenn sich irgendwas im Code ändert und nun doch der String größer sein könnte? Dann hast eine potenzielle Sicherheitslücke (Buffer-Overflow).
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •