I am having a problem where I do not understand the syntax on how to pass my array to a function and then access each argument. As it is now, while my array is in main, I can print each argument like:
However when I try to access it like above when I try to pass the args array to a function, I get a segmentation fault, I can only print the first element using:Code:printf("%s\n", args[0]); printf("%s\n", args[1]); etc...
Could somebody please tell me if I'm passing the array incorrectly to the translate function and then subsequent functions, or how to acces each element beyond the first one.Code:printf("%s\n", args)
Code:void translate(char *input); void list(); void changedir(char *list); void lsdir(char *list); #include <stdio.h> #include <string.h> #include <stdlib.h> main() { char *cptr, *csh; char buffer[256]; char **args = NULL; int nargs = 0; printf("sh%% "); cptr = fgets(buffer, 256, stdin); csh = strtok(buffer, " ,\n"); while(strcmp(csh, "bye") != 0) { while(csh != NULL) { args = realloc(args, sizeof(char *)*(nargs + 1)); args[nargs] = malloc(strlen(csh) + 1); strcpy(args[nargs], csh); nargs++; csh = strtok(NULL, " ,\n"); } translate(*args); nargs = 0; printf("sh%% "); cptr = fgets(buffer, 256, stdin); csh = strtok(buffer, " ,\n"); } } void translate(char *input) {/*This function translates what command is entered and calls *appropriate function to execute command */ if(strcmp(input, "?") == 0) { list(); } else if(strcmp(input, "cd") == 0) { changedir(input); } else if(strcmp(input, "ls") == 0) { lsdir(input); } else return; } void list() {/*This function prints a list of all available commands when *? is entered */ printf("\n***List of Available Commands***\n"); printf("? - Displays this message\n"); printf("bye - Exits UNIX shell\n"); printf("cd - changes current directory\n"); printf("ls - lists files in current directory\n"); printf("\n"); } void changedir(char *input) { } void lsdir(char *input) { int pid; int status = 0; pid = fork(); if(pid == -1) printf("error!!!\n"); else if(pid == 0) { execvp(list, list); exit(1); } else if(pid > 0) { waitpid(pid, &status, 0); } printf("%d\n", pid); }



LinkBack URL
About LinkBacks



. You have been a great help to me, thank you very much. 