B
So, also hier geht nix mehr
Ich sitze jetzt hier, mit all den selbstgeschriebenen String-funktionen, allerdings will keine dieser mit Variablen als Parameter funktionieren. Es erscheint also klar, dass beim Aufruf einer Funktion mit einer string-konstante ("Test", z.B.) alles wunderbar funktioniert. Das Problem, logischerweise, ist zurückzuführen zur Texteingabe, wo meiner Meinung nach ein grosses Missverständnis (meinerseits) vorliegt.Zum Einlesen benutze ich die Funktion read (unistd.h). Ich glaube, dass diese Funktion kein Stringabschlusszeichen anhängt ('\0'), da die Funktion length() mir unendlich grosse Werte (nur bei Variablen als Parameter scheinen diese unendlich gross, oder negativ zu sein, da die schleife for (i=0;i<length(variable);i++){...} nie endet) zurückgibt.
functions.c
#include <unistd.h>
#include <stdlib.h>
int length(char *string) /*gibt Länge von String zurueck*/
{
int i=0;
write(STDOUT_FILENO,"length",6);
while (string[i++]!='\0');
return i-1;
}
int nSubStr(char *string,char separator) /*gibt Anzahl ';' zurueck*/
{
int i=0,n=0;
write(STDOUT_FILENO,"nSubStr\n",8);
while(i<length(string))
{
if (string[i]==separator)
{
n++;
}
}
return 2;
}
void StringCopy(char *source,char *dest,int start, int count)
{
int i;
write(STDOUT_FILENO,"StringCopy",10);
if (start<length(source) && start+count<=length(source))
{
for (i=start;i<count;i++)
{
dest[i]=source[start+i];
}
}
}
int StringCompare(char *string1,char *string2)
{
int i;
int equal=0;
int n1=length(string1);
int n2=length(string2);
write(STDOUT_FILENO,"StringCompare",13);
if (n1==n2)
{
for (i=0;i<n1;i++)
{
if (string1[i]!=string2[i])
{
equal=1;
}
}
}
else
{
equal=n1-n2;
}
return equal;
}
int MaxCmdTaille(char *ligne)
{
int i,max=0,taille=0;
write(STDOUT_FILENO,"MaxCmdTaille",12);
for (i=0;i<length(ligne);i++)
{
if (ligne[i]==';')
{
if (taille>max)
{
max=taille;
taille=0;
}
}else
{
taille++;
}
}
return max;
}
void SeparerCommandes(char *ligne,char **commandes)
{
int i=0,cmds=0,k=0;
char *commande;
commande=malloc(MaxCmdTaille(ligne) * sizeof(char));
write(STDOUT_FILENO,"SeparerCommandes",16);
for (i=0;i<length(ligne);i++)
{
if (ligne[i]==';')
{
StringCopy(commande,commandes[cmds],1,length(commande));
cmds++;
k=0;
}else
{
commande[k++]=ligne[i];
}
}
}
myshell.c
#include <stdlib.h>
#include <unistd.h>
#include "functions.h"
#include <string.h>
#define MAXLIGNE 256
int main(int argc,char **argv){
char *ligne; /*enthälte die Benutzereingabe*/
int nCommandes;
char **commandes; /*wird die kommandos separat enthalten*/
int i;
int NoExit=1; /*wenn negativ, programm verlassen*/
ligne=malloc(MAXLIGNE*sizeof(char));
while (NoExit>0)
{
/*Benutzereingabe*/
write(STDOUT_FILENO,"\nmyshell>",9);
read(STDIN_FILENO,ligne,MAXLIGNE);
/*interprétation de la saisie*/
nCommandes=nSubStr(ligne,';');
commandes=malloc(nCommandes*sizeof(char*));
/*shell core*/
for (i=0;i<nCommandes;i++)
{
if (NoExit>0)
{
if(StringCompare(commandes[i],"exit")!=0) /*solange "exit" nicht eingegeben wurde*/
{
system("ls");
}else /*wenn "exit" eingegeben wurde*/
{
NoExit=-1; /*programm beenden*/
}
}
}
}
return 0;
}
Wenn irgendwelche weiteren Fragen sind um mir weiterhelfen zu koennen, bitte einfach nur fragen!
Kommentare,hilfen und ratschläge sind alle Willkommen!
Danke nochmals im Voraus..
mit freundlichen Grüssen..