Probleme lecture sur l'entré standard 0 C

Bonjour a vous,

Ma config :
-- Language C
-- OS : Open SUSE

J'ai un problême a lire sur l'entré standard en C voila je m'explique je voudrai interagire avec l'utilisateur je suis en pleine création d'un minishell voici le code que je ne compren pas qu'il ne marche pas :) merci de votre aide

int main(int ac, char **av)
{
char *buff;

buff = malloc( 50 * sizeof(char));
while(1)
{
read(0, buff, 50); // Lecture sur l'entré standard
puts(buff); // Hum pas beau puts je ses :)
if(strcmp(buff, "dam") == 0)
puts("sa marche");
}
}

1 ere erreu : Quan je tape un plus petit mot que le précédent la memoir garde des traces sur mot precedent ex:
/>damien
/>dam
ien // Voila le reste

2 eme erreur : il ne rentre pas dans ma condition voila

Merci a vous :)
--

La sagesse est d'être fou lorsque les circonstances en valent la peine
Configuration: Linux Open_Suse 10.3
Firefox 2.0.0.6

2 réponses

  1. Contributeur
    Salut,

    1 ere erreu : Quan je tape un plus petit mot que le précédent la memoir garde des traces sur mot precedent ex:
    />damien
    />dam
    ien // Voila le reste

    Normal, read n'ajoute pas de '\0' à la fin de la chaîne. Donc utilise plutôt fgets, ça sera mieux.

    2 eme erreur : il ne rentre pas dans ma condition voila
    Normal aussi. Tu as appuyé sur la touche entrée que ton OS te traduit par un joli '\n'. Du coup, il faudrait mieux comparer avec "dam\n", ou alors virer le \n de ta variable buff avec strchr.

    // Hum pas beau puts je ses :)
    L'orthographe n'est pas belle (ses au lieu de sais). Mais puts est très joli ;).

    Cdlt
    0
    1. --
      merci pour tes reponsses précises désoler pour l'othographe
      Bonne journée.

      La sagesse est d'être fou lorsque les circonstances en valent la peine
      0