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] Vector ähnliches Konstrukt

    • Frage
  • davewood
  • 15. November 2007 um 09:05
  • Unerledigt
  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 15. November 2007 um 09:05
    • #1

    Ich greif auf eine Datenbank zu und weiß nicht per se was ich zurückbekomme.

    Zurückliefern sollte die Funktion eine Row der Selectabfrage.

    zB.: [int, char*, char*, int, ...]

    die Größe des Arrays muss jetzt nicht unbedingt dynamisch sein, bvon mir aus mach ich da ne maximalgröße von 100 und gut is. Aber wie ich die unterschiedlichen Datentypen reinbring is mir noch ned ganz klar.

    Array aus void pointern die ich nacher auf den entsprechenden Typ caste?

    Vielleicht hat ja jemand Musse mir zu helfen. :)

    vielen Dank

    david

    I like Toast!

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 15. November 2007 um 09:34
    • #2

    Ich würde wohl jede Zeile in ein Array von unsigned char lesen und mir dann die einzelnen Felder mit memcpy rauskopieren. Soweit ich die Problemstellung richtig verstehe. Wenn du zur Laufzeit dynamische Typen brauchst, nimmt man üblicherweise ein struct bestehend aus einem enum für den Typen und einer union, wo die Daten drinstehen.

    C
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    enum types { INT, FLOAT, CHAR_20 };
    
    
    struct field
    {
        enum types type;
        union
        {
            int i;
            float f;
            char str[20];
        } data;
    };
    
    
    void print_field(struct field *f)
    {
        switch (f->type)
        {
        case INT:
            printf("%d\n", f->data.i);
            break;
        case FLOAT:
            printf("%f\n", f->data.f);
            break;
        case CHAR_20:
            printf("%s\n", f->data.str);
            break;
        default:
            fprintf(stderr, "error: reached default case in switch, %s:%d\n",
                            __FILE__, __LINE__);
            abort();
        }
    }
    
    
    /* demo */
    int main(void)
    {
        struct field my_field;
    
    
        my_field.type = INT;
        my_field.data.i = 42;
        print_field(&my_field);
    
    
        my_field.type = FLOAT;
        my_field.data.f = 3.14159;
        print_field(&my_field);
    
        my_field.type = CHAR_20;
        strcpy(my_field.data.str, "hello, world!");
        print_field(&my_field);
    
    
        my_field.type = 42;
        print_field(&my_field); /* oops */
    
    
        return 0;
    }
    Alles anzeigen

    *plantsch*

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 15. November 2007 um 15:51
    • #3

    ich bekomm ja schon die einzelnen columns als Pointer retour.
    Was ich halt nicht weiß ist in welcher Rehenfolge die Datentypen nun sind und wieviele.

    Danke vielmals für deinen Tip, ich habs aber nun mit einer Funktion

    Code
    void **fetch_row()

    gelöst.

    Dafür hab ich nun ein memory Problem. Ich sags euch, Oracles OCI API is ein rechter Schas.

    I like Toast!

  • Erklärbär
    8
    Erklärbär
    Mitglied
    Reaktionen
    6
    Punkte
    661
    Beiträge
    130
    • 15. November 2007 um 16:27
    • #4
    Zitat von davewood


    Dafür hab ich nun ein memory Problem. Ich sags euch, Oracles OCI API is ein rechter Schas.

    dann verwend doch den PROC precompiler

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 16. November 2007 um 00:07
    • #5

    der um einiges langsamer und unflexibler is. hab eh beide getestet und leider oci verwenden muessen

    I like Toast!

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    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