Inhalt von Funktionen in Zeiger schreiben?



  • Die Frage entsteht beim Nachvollziehen von Code:

    Also, ich hab folgendes:

    char *pszDSN = NULL;
    char szDSN[51];
    int li_error = 0; 
    //------------------------------
    pszDSN = GetTagChar(Tag_eins);
    if (pszDSN)
    {
       strncpy(szDSN, pszDSN, 50);
    }
    else
    {
       li_error = 1;
    }
    //------------------------------
    //In weiterer Folge des Codes wird ein ODBC-Connect gemacht
    

    Grundsätzlich ist klar was passiert:
    Variablen initialisieren ist mir sehr sympathisch.
    Längen definieren auch.
    Das Ergebnis einer Funktion wird im Zeiger gespeichert (?)
    Der Zeiger wird geprüft.
    Im if wird exakt definiert kopiert, in Ordnung.

    A. Worin liegt der Vorteil, wenn das Ergebnis einer Funktion im Zeiger gespeichert wird? Wieso schreibt man das nicht direkt in szDSN rein?
    B. Wenn der Inhalt von pszDSN in szDSN gespeichert werden soll, dann müsste im if doch mindestens strncpy(szDSN, *pszDSN, 50); stehen!?
    C. Der Code funktioniert. Liegt her vielleicht nur schlechter Programmierstil vor?

    Schönes WE vorab.

    mismatch



  • A. Worin liegt der Vorteil, wenn das Ergebnis einer Funktion im Zeiger gespeichert wird? Wieso schreibt man das nicht direkt in szDSN rein?

    Wenn man der Funktion einen Zeiger übergibt, wo die Daten hinkopiert werden sollen, stößt man idr. auf 2 Probleme

    1. man braucht noch ein zusätzlichen Parameter für die länge des Buffers, dann kann es sein, dass nicht alle Informationen in den Buffer geschrieben werden können
    2. man reserviert selber speicher für den Buffer, dann steht der Programmierer aber vor dem Problem den Speicher wieder freizugeben und so entstehen leicht Speicherlücken

    Wenn man einen Zeiger auf einen internen statischen Buffer zurückgibt, dann kann der Programmierer sich selber um die Speicherverwaltung kümmern (man steht nur vor dem Problem, dass das nicht Threadsicher ist!)

    B. Wenn der Inhalt von pszDSN in szDSN gespeichert werden soll, dann müsste im if doch mindestens strncpy(szDSN, *pszDSN, 50); stehen!?

    hmm, irgend wie versteh ich nicht, was du meinst

    C. Der Code funktioniert. Liegt her vielleicht nur schlechter Programmierstil vor?

    Der Code ist auch korrekt und den Stil finde ich (bis auf die UN, dass ist aber ein Flamewar Thema ;)) auch nicht schlimm


Anmelden zum Antworten