#include #include #include #include void arg_print(int argc, char *argv[]) { int i = 0; int j = 0; for (i = 0; i < argc; i ++) { j = 0; while(argv[i][j] != '\0') printf("%c", argv[i][j++]); printf(" "); } printf("\n"); } int main(int argc, char *argv[]) { arg_print(argc, argv); int count; char **copy = malloc(sizeof(char *) * (argc-1)); for ( count = 0; count < argc - 1; count++ ) { copy[count] = strdup(argv[count + 1]); } arg_print(argc - 1, copy); copy[0][0] = '@'; argv[0][0] = '@'; arg_print(argc - 1, copy); if (-1 == execvp(argv[1], copy)) { perror("child process execve failed [%m]"); return -1; } }