Ich frage den Benutzer, welche Umgebungsvariable er wissen möchte, und dann scanne ich es mit scanf. Aber es funktioniert nicht für mich. Hier ist mein Code:C - scanf() und dann getenv()
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
char *value;
char input;
printf("Which variable do you want?\n");
scanf("%s", input);
value = getenv(input);
printf("%s", value);
}
Der Compiler sagt:
"Funktionsargument Zuordnung zwischen Typen "const char *" und "char" iSt nicht erlaubt"
Also habe ich versucht, Um die Eingabevariable auf: char const *input
Jetzt gibt es keinen Compiler-Fehler, aber wenn ich einen Namen, zum Beispiel "USER", erhalte ich eine "Segmentation fault (core dumped)"
Fehler.
'Zeicheneingabe; ... scanf ("% s", Eingabe); '->' Eingabe' ist nicht groß genug, um die Texteingabe zu speichern. (Ähnliches Problem mit http://stackoverflow.com/q/37119782/2410359) – chux
Wenn Sie eine der 'scanf()' -Familien von Funktionen aufrufen, 1) überprüfen Sie immer den zurückgegebenen Wert (nicht den Parameterwert), um den Vorgang zu gewährleisten war erfolgreich.2) Wenn Sie den Eingabe - Konvertierungsspezifizierer '% s' verwenden, verwenden Sie immer einen Modifier 'max length' (also 1 kleiner als die Länge des Eingabepuffers), damit der Benutzer den Eingabepuffer nicht überschreiten kann (was zu undefiniertem Verhalten führen würde) kann zu einem seg fault event führen). BTW: Wie soll man eine Zeichenkette einlesen (NUL-terminiertes Char-Array), wenn der Eingangspuffer nur 1 Zeichen lang ist? – user3629249
in Bezug auf diese Zeile: 'printf ("% s ", value);' die Ausgabe wird im Stdout-Puffer sitzen, bis das Programm beendet wird, dann (und nur dann) wird es tatsächlich auf dem Terminal angezeigt. Es wird dringend empfohlen: 'printf ("% s \ n ", value);' weil '\ n' (newline) bewirkt, dass der stdout-Puffer sofort auf dem Terminal angezeigt wird. – user3629249