Sauf quand il est un opérande des &
sizeof
ou unaire opérateurs, ou est chaîne littérale étant utilisée pour initialiser un autre tableau dans une déclaration, une expression de tableau aura son type implicitement converti ("decay") de "N-élément tableau de T" en "pointeur vers T" et sa valeur sera l'adresse du premier élément du tableau (n1256, 6.3.2.1/3).
L'objet string
dans main
est un réseau de 12 éléments de char
. Dans l'appel à print
dans main
, le type de l'expression string
est converti de char [12]
à char *
. Par conséquent, la fonction print
reçoit une valeur de pointeur, pas un tableau. Dans le contexte d'une déclaration de paramètre de fonction, T a[]
et T a[N]
sont tous deux synonymes de T *
; Notez que ceci est seulement vrai pour les déclarations de paramètres de fonction (c'est l'un des plus grands défauts IMO de C).
Ainsi, la fonction print
fonctionne avec un type de pointeur, pas un type de tableau, donc sizeof string
renvoie la taille d'un char *
, pas la taille de la matrice.
Qu'attendez-vous en sortie? – Epeli
Je recommande d'utiliser 'std :: string'. C'est beaucoup plus facile de travailler avec. La longueur serait 'str.size()'. – jwueller
std :: string est C++ plutôt que C –