erwartet, 'char **' but argument is of type 'char *' --argv
Ich bin versucht, zu erstellen eine einfache Schale, die etwas wie "ls" oder "ls -l" und führt es für mich.
Hier ist mein code:
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
void execute(char **argv)
{
int status;
int pid = fork();
if ((pid = fork()) <0)
{
perror("Can't fork a child process\n");
exit(EXIT_FAILURE);
}
if (pid==0)
{
execvp(argv[0],argv);
perror("error");
}
else
{
while(wait(&status)!=pid)
;
}
}
int main (int argc, char **argv)
{
char args[256];
while (1)
{
printf("shell>");
fgets(args,256,stdin);
if (strcmp(argv[0], "exit")==0)
exit(EXIT_FAILURE);
execute(args);
}
}
Ich erhalte die folgende Fehlermeldung:
basic_shell.c: In function ‘main’:
basic_shell.c:42: warning: passing argument 1 of ‘execute’ from incompatible pointer type
basic_shell.c:8: note: expected ‘char **’ but argument is of type ‘char *’
Können Sie mir bitte einige Hinweise, wie die korrekte übergabe von Argumenten, um meine Funktion ausführen?
- wenn ich sehe, wie jemand fragte, was für ein Zeiger, den ich erinnere mich, dass xkcd-comic...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Recht nun, Sie übergeben einen einzelnen string zu
execute()
, die erwartet ein array von strings. Sie müssen zu brechenargs
in der Komponente Argumente, so dassexecute()
können, ordnungsgemäß zu behandeln.strtok(3)
ist wahrscheinlich ein guter Ort, um zu starten.note: expected ‘char **’ but argument is of type ‘char *’
sagt alles.Was Sie sonst noch brauchen ?
args
ist verfaulenden zuchar *
aber Sie habenchar **
fürvoid execute(char **argv)
Müssen Sie teilen Sie Ihre
args
inVerwenden
strtok
Funktion