2015-02-26 4 views
-1

pourquoi ce code donne le mauvais résultat ?? La sortie est 5 et 9, ne doit pas être 5 et il 4. Voici le codeCstrings en C++

int main 
{ 
    char a[10] ={'a','b','c','d','e'}; 
    char c[] = {'q','t','y','t'}; 
    cout<<strlen(c)<<endl<<strlen(a); 
    return 0; 
} 
+1

1. #include 2. ajouter un terminateur NULL pour chaque chaîne – SomethingSomething

+3

Il vous manque des zéros de terminaison. –

+3

Vous pouvez mieux faire 'char a [10] =" abcde ";' Il va assigner le terminateur pour vous – SomethingSomething

Répondre

7

Vous avez un comportement non défini, parce que vous appelez strlen avec un pointeur vers un tableau de caractères qui n'est pas un caractère nul terminée (c). Vous devez passer des chaînes à zéro terminal pour que cela fonctionne. Ceci est un exemple, la fixation et que d'autres erreurs, et y compris les en-têtes nécessaires:

#include <iostream> // std:cout, std::endl 
#include <cstring> // std::strlen 

int main() 
{ 
    char a[10] ={'a','b','c','d','e'}; // OK, all remaining elements 
             // initialized to '\0'. 
             // Alternative: car a[10] = "abcde" 

    char c[] = {'q','t','y','t', '\0'}; // or char c[] = "qtyt"; 

    std::cout << std::strlen(c) << std::endl; 
    std::cout << std::strlen(a) << std::endl; 
} 
+0

Le tableau 'a' n'a-t-il pas une valeur initialisée à 0 pour les éléments restants? – ComicSansMS

+0

@ComicSansMS Oui, c'est vrai, bonne prise. Je vais réparer ça. – juanchopanza

+0

Je voudrais ajouter l'autre option de 'char a [10] =" abcde "' et 'char c [] =" qtyt "' – SomethingSomething

2

c a besoin d'un caractère nul à la fin pour strlen travailler.

Vous pouvez utiliser

char c[N] = {'q','t','y','t'}; 

N est 5 ou plus.

ou

char c[] = {'q','t','y','t', '\0'}; 

ou

char c[] = "qtyt"; 

pour ajouter un caractère nul à la fin de c.