1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[C] Vector ähnliches Konstrukt

    • Frage
  • davewood
  • 15. November 2007 um 09:05
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • davewood
    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

  • Plantschkuh!
    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
  • davewood
    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.

  • Erklärbär
    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

  • davewood
    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

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum