2016-04-03 9 views
0

Ich erhalte einen segfault, wenn ich strcmp() verwende. Ich habe versucht, debuggen mit gdb und wenn ich es (ohne Argumente) ich bekomme einen segfault. Wenn ich zurücktrace, zeigt es an, dass der segfault in Zeile 20 ist, aber ich kann nicht herausfinden, warum es segfaulting ist. Die Anweisung strcmp() befindet sich in Zeile 20. Ich werde die Zeilen 0-21 in meinen Beitrag einfügen, kann aber bei Bedarf weitere hinzufügen.C - segfault bei Verwendung von strcmp()

Die segfault Aussagen als ich sind die run Befehl wie folgt:

Program received signal SIGSEGV, Segmentation fault. 
__strcmp_sse2() at ../sysdeps/x86_64/multiarch/../stcmp.S:213 
213 ../sysdeps/x86_64/multiarch/../strcmp.S: No such file or directory. 

Also dann mache ich einen backtrace und diese:

#0 __strcmp_sse2() at ../sysdeps/x86_64/multiarch/../strcmp.S:213 
#1 0x0000000000400aa6 in main (c=1, v=0x7fffffffead8) at myls.c:20 

Hier mein Code aus Linien 0-21 :

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <dirent.h> 
#include <unistd.h> 
#include <sys/stat.h> 
#include <time.h> 
#include <fcntl.h> 
#include <pwd.h> 
#include <string.h> 
#include <grp.h> 

int main(int c, char *v[]) 
{ 
    DIR *directory = NULL; 
    strut direct *dir_pointer = NULL; 
    int i = 0; 
    char cwd[1024]; 

    if(strcmp(v[1], "-i") == 0){ //line 20, where the segfault happens 
     ... 

alle Tipps/Hilfe geschätzt.

+2

"wenn ich laufe es (ohne Argumente)" - Huh ??? Sie hatten * besser * mindestens ein Argument zur Verfügung, oder nach dem Standard 'v [1]' ist NULL; 'strcmp' spielt nicht gut mit' NULL', für * entweder * seiner Argumente. – WhozCraig

+0

@WhozCraig einige Hintergrundinformationen hierzu: Ich schreibe mein eigenes ls-Programm, das den Unix 'ls'-Befehl nachahmt. Wenn ich es mit './Myls' starte, ist das c = 1 korrekt? Und wenn ich es mit './myls -l laufen lasse, ist das c = 2? und das "-l" = v [1]? –

+0

Ich rate Ihnen dringend, sorgfältig [Lesen Sie die q & a unter dem Link] (http://Stackoverflow.com/questions/3024197/what-does-int-argc-char-argv-mean) von Kons unten zur Verfügung gestellt. Es beantwortet diese Frage und viel, viel mehr. – WhozCraig

Antwort

0

Sie übergeben entweder keine Argumente an das Programm, oder segfold direkt nach der if Anweisung. Der strcmp funktioniert.

Edit: Nur realisiert, dass Sie es nicht ohne Argumente übergeben. Sie verweisen v[1] wenn es keine v[1]

+0

Aber ich habe eine Elif-Anweisung, die sagt 'sonst, wenn (c <2) {', sollte ich immer noch einen segfault bekommen? –

+0

Ja, weil Sie 'v [1]' zuerst bewerten –

+0

Also sollte ich das 'if (c <2)' die erste Aussage sein? Würde das das beheben? –

1

Sie ohne Argumente aufrufen werden (c = 1) und das erste Argument an das Programm gegeben Zugriff (als ob c 2 war) ..

Ich schlage vor, Sie lesen sie diese Antwort

What does int argc, char *argv[] mean?

+0

Was hat das mit dem zu tun "strcmp.S" nicht beginnen gefunden? Der Fehler lautet "Keine solche Datei oder kein Verzeichnis". – DrumM