1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[C] long to string

    • Frage
  • oskar
  • 20. März 2003 um 18:54
  • Unerledigt
  • oskar
    6
    oskar
    Mitglied
    Reaktionen
    6
    Punkte
    351
    Beiträge
    59
    • 20. März 2003 um 18:54
    • #1

    Hallo,

    Ich habe zwei Variablen in C

    1. string = "out."
    2. lomg = [1...10]

    Nun möchte ich die beiden Variablen zu einem gemeinsamen String zusammenfassen.

    eg. string = "out.1"

    Könnt ihr mir da ein paar Tips geben.

    Casten? von long nach String?

    Vielen Dank

  • Soulmerge
    7
    Soulmerge
    Mitglied
    Punkte
    405
    Beiträge
    71
    • 20. März 2003 um 20:48
    • #2

    Ich glaub nicht, dass es dafür vorgefertigte Funktion gibt, aber ich hätte das so gelöst:

    Code
    char* ltostr( long * pl, short size ) {
      short i;
      char* retval = (char*) malloc( sizeof( char ) * size+1 );
      for( i = 0; i < size; i++ )
    	retval[i] = ( pl[i]+'0' );
      retval[ size ] = '\0';
      return retval;
    }


    Und dann strcat verwenden, hoffe das hilft...

    [edit]
    Hmm, da fällt mir auf, dass es ja auch effizienter ginge :)

    Man kann die Schleifenzahl auf 1 reduzieren, indem man die Funktion etwas umschreibt. Sonst läuft strcat über denselben String nochmal...

    Code
    char* str_cat_long_array( char* str, long * pl, short size ) {
      short i, slength = strlen( str );
      char* retval = (char*) malloc( sizeof( char ) * size + slength + 1 );
      strcpy( retval, str );
      for( i = 0; i < size; i++ )
    	retval[ i+slength ] = ( pl[i]+'0' );
      retval[ size + slength ] = '\0';
      return retval;
    }

    Eigentlich nur ein minimaler unterschied, aber wenn ich seit Tagen mit Übersetzerbau beschäftigt bin, ist so eine Funktion _immer_ willkommen :zwinker:
    [/edit]

    '100 little bugs in the code, 100 bugs in the code. Fix one bug, compile it again: 101 little bugs in the code.
    101 little bugs in the code . . .'
    Continue until 0 Bugs reached...

  • MaxAuthority
    17
    MaxAuthority
    Gewinner des Desktop-Contest 2002
    Reaktionen
    5
    Punkte
    3.165
    Beiträge
    626
    • 20. März 2003 um 21:23
    • #3

    hmm, warum nicht einfach ein:

    Code
    char res[1024]; //könnte man mit malloc auch dynamisch machen, aber hier einfach mal die "faule" variante
    for(long i=1;i <=10;i++)
       sprintf(res, "%s%ld", "out.", i);

    EDIT: für long natürlich %ld statt %d

    http://vimperator.org - Make Firefox behave like Vim

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 20. März 2003 um 21:39
    • #4

    Arthur Dent: buffer-overflow vulnerability :grinning_squinting_face:
    besser snprintf verwenden

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • MaxAuthority
    17
    MaxAuthority
    Gewinner des Desktop-Contest 2002
    Reaktionen
    5
    Punkte
    3.165
    Beiträge
    626
    • 20. März 2003 um 21:49
    • #5
    Zitat von hal

    Arthur Dent: buffer-overflow vulnerability :grinning_squinting_face:
    besser snprintf verwenden

    hmm, geb ich dir 100% recht, aber wenn ich in meinem beispiel keine user-eingaben hab, und der erste string 3 zeichen ist, reichen 1020 Stellen für die Zahl sicher.

    Aber du hast recht, eigentlich sollte man snprintf verwenden, v.a. ist es ja nciht wirklich mehr arbeit...

    http://vimperator.org - Make Firefox behave like Vim

  • oskar
    6
    oskar
    Mitglied
    Reaktionen
    6
    Punkte
    351
    Beiträge
    59
    • 20. März 2003 um 23:20
    • #6

    Danke an alle!

  • Soulmerge
    7
    Soulmerge
    Mitglied
    Punkte
    405
    Beiträge
    71
    • 21. März 2003 um 01:22
    • #7
    Zitat


    hmm, warum nicht einfach ein...



    Naja, nennen wir's Beschäftigungstherapie :) (von wegen Übersetzerbau und so)

    '100 little bugs in the code, 100 bugs in the code. Fix one bug, compile it again: 101 little bugs in the code.
    101 little bugs in the code . . .'
    Continue until 0 Bugs reached...

  • MaxAuthority
    17
    MaxAuthority
    Gewinner des Desktop-Contest 2002
    Reaktionen
    5
    Punkte
    3.165
    Beiträge
    626
    • 21. März 2003 um 01:28
    • #8
    Zitat von Soulmerge

    Naja, nennen wir's Beschäftigungstherapie :) (von wegen Übersetzerbau und so)


    wie ist eigentlich übersetzerbau so?

    weil vom namen und den themen hört es sich ja irsinnig interessant an, oder ist es dann wenn man es wirklich macht, nicht mehr so cool?


    ---
    Aja, eine atoi() funktion hätte es auch noch gegeben um eine zahl in einen string umzuwandeln. Aber die ist wieder nicht Buffer overflow sicher :)

    http://vimperator.org - Make Firefox behave like Vim

  • Maximilian Rupp 27. Dezember 2024 um 12:08

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung