J'ai essayé de fonctionner après le programme C et obtenu Défaut de segmentation Code>, je ne reçois pas l'endroit où le code est faux, la sortie indique le programme
terminé avec le code de sortie 139 code>.
5 Réponses :
L'expression a [0] code> a le type
char * code> en raison de la déclaration du tableau
A code>.
printf("\n S==>>> %s", *a );
Tout d'abord le code d'approche correct: second, vous stockez la chaîne "S1" dans un [0] et une chaîne "S2" dans un [1]. Donc, si vous voulez imprimer la chaîne, ce serait comme ci-dessus. p> Si vous essayez d'ajouter * ou et avant le pointeur, cela indiquerait l'adresse du pointeur et pour l'impression de l'adresse% D est utilisé. Maintenant, en cas de code incorrectement, il montrera certainement une erreur p> p>
la ligne p>
est faux. p>
Vous pouvez écrire soit Si vous souhaitez imprimer un seul caractère au lieu d'une chaîne entière, vous devez spécifier printf ("\ n s == >>>% s", * a [0]); code> p>
* A code> ou
A [0] code> (les deux sont équivalents), mais
* a [0] code> est équivalent à
a [0] [0] code>, qui est juste un caractère, c'est-à-dire un seul caractère. Puisque vous avez spécifié que vous imprimez une chaîne dans votre chaîne de format code> Imprimerf code>, vous devez spécifier une chaîne, c'est-à-dire un tableau de caractères terminé NULL, au lieu d'un seul caractère. P>
% c code> dans la chaîne de format code> au lieu de
% s < / code>. p>
printf("\n S==>>> %s",a[0]); // a[0] is of type char *
Alors que toutes les autres réponses ont raison sur la bonne utilisation, je veux expliquer davantage pourquoi vous obtenez exactement une erreur de segmentation.
Le code p> essaie d'imprimer La chaîne \ n s == >>> S1 code> mais échoue surtout avec une défaillance de segmentation, car l'accès de
* A [0] code> entraîne l'adresse
0x73 code> car la valeur hexagonale du
s code> est
0x73 code>.
Et l'adresse
0x73 code> n'est pas mappée dans l'espace d'adressage de votre processus, conduisant ainsi à un défaut de segmentation code> car vous essayez essentiellement d'imprimer une chaîne à l'adresse
0x73 code >. p> p>
* A [0] code> est un
char code>.
% s code> nécessite un
char * code>. Vous voulez probablement juste
a [0] code>.
Aussi, passez en revue les avertissements du compilateur. Devrait obtenir quelque chose comme:
Avertissement: le format '% s' s'attend à ce que l'argument de type 'char *', mais l'argument 2 a le type 'int' [-wormat =] code>