2013-10-06 4 views
0

Donc je construis un shell et une commande que j'implémente est l'invite. Cela prendra un argument et définir que l'invite, mais si aucun argument est entré, il vous demandera l'entrée d'utilisateur et utiliser alors que ..... que ça terriblement libellée de façon très alors voici un exemple:Défaut Seg lors de la saisie de l'utilisateur?

[SHELL] prompt code 
code[SHELL] ls 
code[SHELL] .... 

ou

[SHELL] prompt 
please enter a prefix: (user input goes here, say code again) 
code[SHELL] 

maintenant, la première situation fonctionne très bien, mais lorsque je tente rapide sans argument, il demande l'entrée d'utilisateur, mais quand je rentre, il segmente les défauts et je ne sais pas pourquoi.

C'est le code que j'ai jusqu'à présent:

void prompt(char *target) 
{ 
    if(!target) 
    { 
     printf("Please enter a prefix: "); 
     scanf("%s", &target); 
    } 
    char *result = malloc(strlen(SHELL) + strlen(target) + 1); 
    strcpy(result, target); 
    strcat(result, SHELL); 
    SHELL = result; 
} 

Toutes les idées ?? Peut-être que c'est juste une erreur simple de ma part mais il semble que cela devrait fonctionner. Par ailleurs, dans mon code, "SHELL" est juste une macro pour un tableau de char qui est "[MY_SHELL]:".

Répondre

0

Le problème est avec cette déclaration:

scanf("%s", &target); 

Vous devez passer un pointeur vers un tampon pour la chaîne d'entrée, pas un pointeur vers un char *. Remplacez-le avec quelque chose comme:

target = (char *)malloc(1000); 
scanf("%s", target); 

Bien sûr, ce n'est pas un code sécurisé puisque l'entrée de l'utilisateur peut dépasser 1000 caractères. Mais commençons par les bases.

+0

Ahhh ok merci beaucoup! Cela a fonctionné, (je ne garde pas le 1000 dans malloc, essayé avec 10) mais ouais ça a marché, alors merci! – VakarianWrex