Ich versuche, die Einstellungen meines Terminals nur für Kicks zu bearbeiten. Wenn ich "-a" drücke, sollte "LEFT" auf dem Bildschirm erscheinen. Wenn ich "-w" drücke, sollte "UP" auf dem Bildschirm erscheinen. Wenn ich jedoch mein Programm ausführte, erhalte ich einen Fehler der Segmentierung 11, und ich möchte wissen warum. Mein Code ist unten veröffentlicht und wenn Sie irgendwelche Fragen haben, zögern Sie nicht zu fragen. Danke im Voraus.Segmentierung 11 in C versucht, Stty wiederherzustellen
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
int main(int argc, const char * argv[]) {
int result = 0; // result = file descriptor
struct termios attrib; // attrib that's going to be messed with
struct termios sec_attrib; // attrib that's going to reset everything
//
// TURN OFF: ICANON AND ECHO
// TURN ON: VMIN
tcgetattr(result, &attrib); //getting the attributes from attrib
attrib.c_lflag &= ~ICANON; // turn off ICANON
attrib.c_lflag &= ~ECHO; // turn off ECHO
attrib.c_cc[VMIN] = 1;
tcsetattr(result, TCSANOW, &attrib);
int x = 0;
while(x != -1){
if(strcmp(argv[1], "-w") == 0){
printf("UP");
}
else if(strcmp(argv[1], "-a") == 0){
printf("LEFT");
}
else if(strcmp(argv[1], "-s") == 0){
printf("DOWN");
}
else if(strcmp(argv[1], "-d") == 0){
printf("RIGHT");
}
else if(strcmp(argv[1], "-q") == 0){
x = -1;
}
else{
continue;
}
}
// reset everything
tcsetattr(result, TCSANOW, &sec_attrib);
return 0;
}
"Ich möchte wissen, warum". Um das herauszufinden, müssen Sie das Debugging durchführen. Und das ist am besten, wenn Sie Ihr Programm in einem Debugger ausführen, dessen Ausführung verfolgen und den Status untersuchen. Der Debugger wird Ihnen beispielsweise sofort und genau sagen, welche Codezeile den Seg-Fehler verursacht. – kaylum
Haben Sie versucht, einen Debugger zu verwenden? – immibis
'strcmp (argv [1]' Das ist nicht korrekt. Die Tasten drücken nicht von der Befehlszeile (die 'argv' enthält). Sie müssen' stdin' lesen. – kaylum