FORT> P> bcabbcde
3 Réponses :
Le code de travail sera comme correction 1: p> non lié: des caractères d'espace de fuite tels que \ n dans scanf () - @ ex_nihilo déjà donné un commentaire à ce sujet. P>
BlockQuote> Fix 2: P> espace avant% c supprime tout espace blanc (blancs, tabs ou nouvelles) p>
BlockQuote> Fix 3: P> Si STR2 est une chaîne, le caractère final doit être '\ 0' et nous devons l'ajouter explicitement. Pour cela, nous devons augmenter la taille de la matrice STR2 à 3. P>
blockQuote> p>
C'est bon, fournir i> Vous ne voulez pas pouvoir entrer dans un espace pour l'un des caractères de str2 code>.
scanf ("% s", str); code> est mauvais comme obtient (str); code> Utilisez une limite de largeur comme scanaf ("% 99s", STR); code>
Si look: P> aussi vous ne devez pas ajouter ce STR2 code> est la chaîne la plupart de la fin avec \ 0 code> et la longueur de la transmission doit être 3 code>. \ n code> à votre scanf code> car lorsque vous appuyez sur Entrée, il passera automatiquement à la ligne suivante, Mais lorsque vous ajoutez \ n code> à scanf code> (après les données), il attendra quelque chose à l'exception de la nouvelle ligne ou de la nouvelle place blanche à terminer. P> P>
Pourquoi ST2 de longueur 3 est-il alors que le caractère nul est stocké à STR2 [2]?
@Gauravkumar point sur les matrices est que, ils sont indexés de 0, donc lorsque str2 code> est 3 code> .IT signifie qu'il a 3 code> éléments, qui sont a [0] code> et a [1] code> et A [2] code> (3 éléments n'incluent jamais a [3] code>)
Lorsque j'imprime ma chaîne, il imprime plus que la longueur de sa longueur p>
code n'a pas essayé d'imprimer un string em>. p>
printf ("% s", str2); code> nécessitestr2 code> pour être un string em>.STR [2] CODE> n'est pas un String em> car il manque un caractère null em>. Le résultat est comportement non défini em> (UB). P>Pour imprimer un tableau de caractères similaire à une chaîne em>, même s'il manque un Null caractère < / em>, utilisez un précision em>. L'impression s'arrête lorsque la précision ou un caractère null em> est atteint. P>
xxx pré> alternativement, assurez-vous que
str2 [] code> contient un caractère null em> et imprimez comme avant. p> blockquote>
str2 code> ne contient pas de chaîne car il n'est pas terminé null. Vous ne devez pas utiliser% s code> qui nécessite une chaîne. Cela entraîne un comportement non défini.Une chaîne est une séquence de caractères terminés par un
\ 0 code>. Si vous ne terminez pas la chaîne,printf code> ira au-delà de votre chaîne et imprime tout ce qu'il trouve en mémoire (dans ce cas STR). Augmentez la taille STR2 à 3, définissezstr2 [2] = 0 code> et tout ira bien.@ROBERTOCABONI Je pense que cela demandera un autre personnage de donner comme stdin?
Non liée: les caractères blancheurs de fin, tels que
\ n code> inscanf () code> Les chaînes de format sont presque toujours fausses et Peut causer des ravages avec l'entrée utilisateur . Si vous souhaitez ignorer les caractèresWLINE, ajoutez un espace avant le% c code> (c.-à-d."% c" code>) après un appel précédent surscanf () code >.@Vishnucs non, ça ne le fera pas. Ce que Scanf attend ne dépend pas de la taille de la matrice que vous écrivez, mais uniquement sur le format:% C attrape i> un caractère uniquement.
@Robertocaboni true.