2016-04-25 1 views
-2

Pour comparer deux chaînes par une fonction strcmp(), j'ai pris une chaîne d'entrée par fgets() et cin et une autre est donnée en fonction comme argument par défaut. Mais quand je les compare par strcmp() sorties de funtion ne correspond pas.La sortie ne correspond pas à la fonction strcmp() c

char a[20]; 
    int b; 
    cin>>a; 
    b=strcmp(a,"ab"); 
    cout<<b; 

où i prendre comme entrée aab et la valeur de b est 0, qui est tout à fait fine.But lorsque, pour la même entrée est prise par fgets()strcmp() puis sortie ne sont pas même que précédemment.

char a[20]; 
    int b; 
    fgets(a,sizeof(a),stdin); 
    b=strcmp(a,"ab"); 
    cout<<b; 

a 's valeur est ab et b' est la valeur de 1. Pourquoi? est-ce un problème de compilateur ou autre chose?

+1

Ce n'est pas un problème de compilateur. Le problème est que vous n'avez pas lu les documents de plus près. [Les docs de la fonction fgets] (http://en.cppreference.com/w/c/io/fgets). Que pensez-vous que le deuxième paramètre fait? – PaulMcKenzie

+0

'fgets' et' cin >> a' ne donnent pas la même chaîne. Veuillez lire la documentation de _both_ pour mieux comprendre ce qu'ils font. –

+0

@PaulMcKenzie comme str contiendra ce caractère de nouvelle ligne de sorte qu'il donne la valeur 1. est-ce exact? –

Répondre

1

fgets() ne dépouille pas de saut de ligne, par section 7.21.7.2 Le fgets fonction de the C standard:

La fonction fgets lit au plus un de moins que le nombre de caractères spécifié par n de le flux pointé par stream dans le tableau pointé par s. Aucun caractère supplémentaire n'est lu après un caractère de nouvelle ligne (qui est conservé) ou après la fin du fichier. Un caractère nul est écrit immédiatement après que le dernier caractère a lu dans le tableau.