Pourquoi ce code ne fonctionne pas. Il suffit d'essayer de vérifier si l'entrée de l'utilisateur est identique à un mot de passe
6 Réponses :
passe code> est un pointeur non initialisé et vous essayez d'y écrire. Vous devez allouer suffisamment de mémoire pour tenir une chaîne. Par exemple,
Char Pass [Taille] Code> fonctionnera mieux. P>
En effet. Remarque Vous pouvez également utiliser une allocation dynamique (avec un pointeur sur char code>), mais il est inutile ici.
Vous devez affecter le Pass code> de sorte que le
scanaf code> aura une place pour stocker l'entrée. Sinon, vous avez une corruption de mémoire. P>
Vous n'avez pas réellement attribué d'espace pour mettre des données. Définition d'un pointeur définit simplement une variable qui peut contenir l'adresse d'un bloc de données, elle n'alloue pas le bloc.
Vous avez quelques options, allouez une mémoire dynamique sur le tas pour écrire et faire le point de pointeur. à cela. Ou utilisez la mémoire allouée statique sur la pile et passez l'adresse à vos appels. Il y a peu d'avantages à la mémoire dynamique dans ce cas (car il est temporaire d'utilisation et de petite taille). Vous auriez plus de travail à faire si vous avez utilisé une mémoire dynamique - vous devez vous assurer de recevoir ce que vous avez demandé lors de l'attribution et de l'avoir remis lorsque vous avez terminé et que vous vous assurez de ne pas l'utiliser. Après que vous ayez remis (difficile dans une grande application, croyez-moi!) C'est juste plus de travail, et vous ne semblez pas avoir besoin d'effort supplémentaire. p>
Les exemples ci-dessous auraient également besoin d'une erreur importante. Vérification, mais vous donner l'idée générale. p>
par exemple par exemple p> ou p>
très clair. Vous avez oublié le & dans la 2e options Scanf. Je n'ai pas compris pourquoi est préférable d'utiliser la mémoire dynamique (tas) que la mémoire statique (pile). Qui est plus petit?
Vous n'avez pas besoin de l'ampersand pour l'appel Scanf car vous référez-vous à un tableau sans index est i> l'adresse, c'est-à-dire pass == & pass [0]
@Joe e.d.g.e., pas i.e. / grammaire-nazi
Oui, le pointeur n'a pas été initialisé. Si vous le débogez, vous obtiendrez une défaut de violation d'accès ou de segmentation code>.
Le code peut être modifié comme suit.
char pass[22];//22 can be replaced with other number
printf("Write the password: ");
scanf("%s", pass);
if( strcmp( pass , "acopio") == 0)
printf("fu");//just to check
@DAVESHAW: Je voulais poster la même chose, mais Stackoverflow ne me permettrait pas de sauvegarder les modifications <6 caractères du changement: D
Vous n'avez pas initialisé Pour quelque chose de simple comme ceci, vous pouvez déclarer PASS code> pour pointer sur un tampon ou un autre emplacement pour stocker l'entrée.
passer code> comme une matrice de
char code> au lieu d'un pointeur: p>
char pass[N]; // where N is large enough to hold the password plus a 0 terminator
scanf("%s", pass);
if (strcmp(pass, "acopio") == 0)
{
...
}
#include<stdio.h> main() { int mystrcmp(char *,char *); char s1[100],s2[100]; char *p1,*p2; p1=s1; p2=s2; printf("Enter the first string..?\n"); scanf("%s",p1); printf("Enter the second string..?\n"); scanf("%s",p2); int x=mystrcmp(p1,p2); if(x==0) printf("Strings are same\n"); else printf("Strings are not same..\n"); } int mystrcmp(char *p1,char *p2) { while(*p1==*p2) { if(*p1=='\0' || *p2=='\0') break; p1++; p2++; } if(*p1=='\0' &&as *p2=='\0') return(0); else return(1); } simple code for beginners....
Pourquoi -1? J'apprends; essayé de trouver la réponse ici; Et pour les débutants, il n'est pas facile de comprendre d'autres réponses.