Mon professeur nous a dit d'utiliser "&" afin de stocker des valeurs dans nos variables souhaitées, j'ai essayé d'utiliser scanf () et j'ai essayé de stocker des valeurs à certaines variables sans le "&" et j'ai remarqué que ça fonctionne juste bien? Est-ce que cela affecte mon code de toute façon malgré moi malgré cela pensant que ce n'est pas?
Voici les codes que j'ai essayés. Le code est un élément de vérifier si la deuxième entrée est une sous-chaîne.
La forme originale qui est enseignée par mon professeur: p> puis j'ai modifié la pièce lorsque le programme demande des entrées à ceci: p> printf("Enter the a word: \n");
scanf("%s", word1);
printf("Enter the potetial substring: \n");
scanf("%s", word2);
5 Réponses :
Si vous allez à la page Wikipedia pour Scanf, vous pouvez lire: p>
Peu importe le type de données Le programmateur souhaite le programme de lecture, les arguments (tels que et n ci-dessus) doivent être des pointeurs pointant vers la mémoire. Sinon, la fonction ne fonctionnera pas correctement car elle tentera de remplacer les mauvaises sections de la mémoire, plutôt que de pointer vers l'emplacement de la mémoire de la variable que vous essayez d'obtenir une entrée. P> blockQuote>
https://fr.m.wikipedia.org/wiki/scanf_format_string p>
Je ne sais pas quel pays vous vez, mais essayez de toujours regarder Wikipedia à la fois dans votre mère de la maternelle et en anglais. Il y a souvent plus d'informations dans les pages anglaises (mais pas toujours) p>
Merci, je l'ai réalisé maintenant depuis que j'ai essayé d'exécuter un code avec des valeurs INT et que les programmes s'arrêtent. Il s'avère que j'ai vraiment besoin d'utiliser le «&» malgré le fait que les mots encore pour le type de données de caractère. Merci.
@HAXCKZERSSSXZ Dans votre cas, vous finissez par passer un pointeur, que vous utilisiez si vous utilisez & code> ou non, donc la citation ne s'applique pas. Sans parler que Wikipedia n'est pas si fiable dans certains cas.
@HolyBlackCat C'est ce que Wikipedia explique dans le paragraphe après celui que j'ai cité, mais je n'allais pas copier coller toute la page. À propos de Wikipedia, je n'ai jamais rencontré une erreur dans une page "technique". Je pense que c'est fortement fiable pour ce genre de questions.
pour un type élémentaire, tel que qui est également vrai pour un tableau de caractères, cependant, Le compilateur par défaut utilise l'adresse du premier élément d'un tableau lorsque vous passez le nom de la matrice. Donc: p> scanf code> doit connaître l'emplacement de la mémoire où placer la valeur lue et éventuellement convertie. int code>, double code>, char code> signifie pour la transmettre l'adresse em> de la variable. p>
Si vous voulez bien comprendre, il existe de nombreux postes sur Stackoverflow. Faites une recherche avec "Tarray Decaying" et "Adresse de tableau". Par exemple Stackoverflow.com/questions/8106132/array-addressing et Stackoverflow.com/questions/1461432/What-is-Array-Decaying (et tout le poste associé) .
@Haxckzersssssxz Si vous avez compris, cliquez sur la tique verte à gauche de cette réponse pour marquer votre problème tel que résolu.
C Les tableaux expriment des contextes d'évaluation (tels que votre argument passant à alors que, Votre compilateur doit avoir vigré un avertissement de vous indiquer que le type d'argument attendu était résumé; La syntaxe appropriée pour scanf code>) en tant que pointeur à type, où le type est le type d'élément sous-jacent de la matrice. Par conséquent, mot code> exprime comme char * code>. Le résultat de l'adresse est celui du premier élément. p>
& word1 code> évalue comme adresse même em> estime, mais tapée à char (*) [100] code> (car c'est exactement ce que vous avez demandé. pour). C'est la même adresse, et donc scanf code> contre un % s code> SPÉCIFICATEUR "fonctionne" (Terme) (terme utilisé lâchement). p>
char * code> et que vous donnez char (*) [100] code>. Si ce n'est pas le cas, augmentez vos avertissements. p>
% s code> est de passer un char * code>. Dans ce cas, cela est obtenu par Word1 code> (rincer / répéter pour Word2 code>). Il peut em> travailler à l'aide de l'adresse de l'opérateur, mais il n'y a aucune raison de l'utiliser dans ce contexte et de toutes les raisons de ne pas. P>
Spécifiquement lors de l'utilisation de Ainsi, la bonne voie est la suivante: p> Si vous enseignez, vous devez avoir besoin Lorsque vous passez un mais si Vous utilisez scanf code> pour lire une chaîne dans char [n] code> (ou char * code>), vous ne devez pas utiliser & code>. et code> dans ce cas, ils " Re faux. p>
% s code> s'attend à ce que Un argument de type Char * code>. p> char code> tableau ( Char [n ] code>) sans utiliser & code>, il est implicitement converti en un pointeur à son "premier élément - char * code>. p> & code>, vous finissez par passer char (*) [n] code> (un pointeur sur un char code> tableau n < / code>) à la place.
Cela modifie le type de pointeur, mais pas sa valeur numérique ' em>. À cause de cela, l'ajout & code> n'a généralement aucun effet dans ce cas.
Mais formellement, car le type de l'argument est incorrect, le comportement est indéfiend. P> p>
Le signe & code> est utilisé pour le référencement de pointeur. Imaginons que vous avez la variable suivante: char word1[100];
printf("%08X\r\n", word1);
printf("%08X", &word1);
Je pense que cela est également bon pour la question de l'entrevue C.