2016-04-24 9 views
-1

ich mit dem folgenden Problem bingetuid für verschiedene Null zurück Wurzel

void main(void){ 
uid_t getuid(void); 
gid_t getgid(void); 

uid_t user_id; 
gid_t group_id; 

printf("user_id: %d\n",user_id); 
printf("group_id: %d\n",group_id); 
exit(0); 
} 

das ich habe, um das Ergebnis zu laufen: user_id: 134513819 und group_id: -1216946176 als die Datei gehört zu der Wurzel und als root läuft nicht zurück:

auch wenn jemand klären kann, warum es einen negativen Wert zurückgibt, schätzen.

+0

Wo im Code haben Sie den Wert 'user_id' oder' group_id' eingestellt? –

+1

Ich stimme diese Frage zu schließen - du nennst nie 'getuid' oder 'getgid'. Und offensichtlich kompilieren Sie nicht mit Warnungen aktiviert, 'void main' ?? –

+0

Ich denke, das Problem ist in printf, also denke ich, es ist ein minimales Arbeitsbeispiel? Zumal der Rückgabetyp von getuid und getgid angegeben ist. – krork

Antwort

-2

Falsche Typen in printf. % d ist eine vorzeichenbehaftete Dezimalzahl. Du willst wahrscheinlich% u.

Die Nummer ist wegen der unterschiedlichen binären Darstellungen von Zahlen negativ. Bei einer vorzeichenbehafteten Dezimalzahl steht das erste Bit in der Folge von Nullen und Einsen in Ihrem PC für das Vorzeichen: Plus oder Minus.

Für unsigned Dezimalstellen das erste Bit eine exponentielle von 2.

So stellt, wenn Sie versuchen, eine Folge von Bits zu interpretieren, die eine nicht signierte Dezimalzahl darstellt (% u) als Dezimalzahl mit Vorzeichen (% d), das erste Bit, das in einen numerischen Wert wie 2^7 übersetzt werden soll, wird als Plus oder Minus interpretiert.

Vorzeichenlose 8-Bit-Dezimalstellen reichen von 0 bis 255, vorzeichenbehaftete 8-Bit-Dezimalstellen reichen von -127 bis 128, was ebenfalls 256 verschiedene Ziffern ergibt.

Siehe https://en.wikipedia.org/wiki/Signed_number_representations

+1

OP verwendet nicht initialisierte Variablen, so dass das falsche Formatzeichen die geringste Sorge ist. –

+0

Wenn das in der Tat das ganze Programm ist. Ich schätze, er hat gerade einen Ausschnitt veröffentlicht, also warum soll er ihm das und die Antwort nicht geben? Es ist auch sein erster Beitrag. – krork

Verwandte Themen