Bases de la programmation en C

char s[10] = "hello";
printf("%zu %zu\n", strlen(s), sizeof s);

Quelle est la sortie obtenue en exécutant le code ci-dessus, qui porte sur un tableau de char contenant une chaîne ?

  1. A5 10
  2. B6 10
  3. C10 10
Afficher la réponse et l'explication

Réponse : A. 5 10

En C, une chaîne est une suite de caractères suivie du caractère de fin '\0'. strlen compte les caractères depuis le début jusqu'au '\0' exclu : il donne 5 pour "hello". sizeof s est la taille du tableau s tout entier, soit les 10 octets déclarés (les éléments restants contiennent 0). Si l'on omet le nombre d'éléments, comme dans char s[] = "hello";, on obtient un tableau de 6 octets, '\0' compris.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation en C

  1. Après les déclarations ci-dessus, on écrit l'une des instructions A « p = t; », B « *p = 'x'; », C « q = t; » ou D « *q = 'x'; ». Quelle combinaison indique celles qui provoquent une erreur de compilation ?
  2. Quelle est la sortie obtenue en exécutant le programme ci-dessus, qui utilise un tableau de pointeurs de fonction ?
  3. fill et use sont des fonctions définies ailleurs. Quel est le problème de la fonction ci-dessus ?
  4. Quelle affirmation sur le pointeur renvoyé par la fonction make ci-dessus est correcte ?
  5. En C, quelle est la raison la plus appropriée pour laquelle il est recommandé d'écrire p = NULL; juste après free(p); ?