GetUid



  • Sers, ist zwar ein Problem unter Unix, denke aber passt hier besser:
    Wieso geht folgender geht nicht? Die Fehlermeldung ist:

    info.cpp: In function void PrintUserName()': info.cpp:17: assignment to \char *' from `__uid_t' lacks a cast

    #include <iostream>
    #include <unistd.h>
    
    using namespace std;
    
    namespace UI {
      uid_t getuid(void);
    }
    
    struct Userinfo {
      char *name;
    };
    
    void PrintUserName()
    {
      Userinfo ui;
      ui.name = UI::getuid();
    }
    
    int main()
    {
    }
    


  • uid_t ist ein typedef für __uid_t, das ein typedef auf __uint32_t ist, das auf i32 architekturen unsigned int ist.
    Was dir getuid zurückgibt, und was eine uid ist, wird dir Linux/Unix Forum besser beantwortet.



  • man: getuid(2)

    getuid gibt Dir nicht den Benutzernamen sondern die numerische User-ID zurück!



  • Geht trotzdem nicht!

    #include <iostream>
    #include <unistd.h>
    
    using namespace std;
    
    namespace UI {
      uid_t getuid(void);
    }
    
    struct Userinfo {
      unsigned int uid;
    };
    
    void PrintUserName()
    {
      Userinfo ui;
      ui.uid = getuid();
    
    }
    
    void PrintInfo(Userinfo* u)
    {
      cout << u->uid;
    }
    int main()
    {
      PrintInfo();
    }
    

    ausserdem heißt die funktion nur PrintUserName, da ich später noch andere sachen in diese Funktion packen werde.



  • Schau doch mal was Dein Compiler für Meldungen ausspuckt; PrintInfo verlangt ein Argument vom Typ Userinfo* aber Du übergibst keines.

    Meintest Du vielleicht sowas:

    #include <iostream>
    #include <unistd.h>
    
    using namespace std;
    
    struct Userinfo {
      unsigned int uid;
    };
    
    void PrintInfo(Userinfo* u)
    {
      cout << u->uid;
    }
    
    void PrintUserName()
    {
      Userinfo ui;
      ui.uid = getuid();
      PrintInfo(&ui);
    }
    
    int main()
    {
      PrintUserName();
    }
    

    Das sollte funktionieren, allzu schön ist es aber nicht...



  • Du machst mir ja meinen Code zu nichte 😕
    Ist schon richtig so das ich PrintInfo() in main() aufrufen will.



  • Warum übergibst Du dann keinen Parameter?


Anmelden zum Antworten