Kurz zum Thema guter Progammierstil:
Code: Alles auswählen
#include <dirent.h>
FILE *f;
DIR *dir;
struct dirent *dirzeiger;
off_t pos;
char input[256],inputmod[256];
char Verzeichnis[256];
char Verzeichniss[256];
char Verzeichniss_neu[256];
char strtemp[256];
char ls[]="ls";
char change_dir[]="cd";
char grep[]="grep";
char pipes[]="|";
char *date="date";
char *raus="exit";
char *a;
char *ptr4vek[1000];
int proNotFound = 1,laengeInput,cd_aufruf=0,cd_int=0;
int ls_zaehler=0;
char *ptr,*ptr5,*ptr4,*ptr6;
Du Deklarierst hier eine reihe Variablen, aber Global. Das sollte man so gut es geht vermeiden. Zum einen verbaust du dir dadurch Schlüsselwörter, du kannst in keiner Unterfunktion eine neue Variable "raus" oder "date" definieren, weil du das schon mal Global gemacht hast. Zudem verlierst du die Kontrolle, in welcher Variable wo etwas gelesen oder geschrieben wird, was die Variable eigentlich machen soll oder was sie bedeutet.
Man sollte Variablen nur innerhalb der Funktion deklarieren, in der sie genutzt wird.
Das erleichtert dir auch das Fehler finden. Ohne Globale Variablen hängt das Ergebnis einer Funktion rein von den übergebenen Parametern und dem Code ab und nicht mehr.
Dann zu deiner Methode:
Code: Alles auswählen
int i=1,j=3;
for(i=1;i<=strlen(dire)-3;i++){
strtemp[i]=dire[j];j++;}
Etwas überflüssig das ganze. Wozu schneidest du etwas vom Ende ab?
Warum diese Zuweisung, diese hat keine Auswirkung.
Was ist überhaupt deine Fehlermeldung?
Ich würde das ganze etwa so aufbauen:
Code: Alles auswählen
void dirMethode(char * dir) //Kein Array sondern ein Pointer übergeben
{
char * tmp = malloc(255); //Bisschen Speicher reservieren
//dir[strlen(dir) - 2] = '\0'; //Bisschen was vom ende Abschneiden, warum eigentlich?
chdir(dir);
getcwd(tmp,255);
printf("Das aktuelle Arbeitsverzeichnis ist:\n%s\n",tmp);
free(tmp);
}
Redundanz macht wiederholen unnötig.
quod erat expectandum