C la comparaison de pointeurs (avec les caractères)
Bonsoir, j'ai 2 fonctions et chacun d'eux accepte en argument un pointeur vers char:
char pointer[255];
func1(char* pointer)
{
...
memcpy(pointer,some_char,strlen(something));
return;
}
func2(char* pointer)
{
...
if (pointer==someother_char) exit(0); //FAILs
//also I have
if(pointer==someother_pointer2char); //FAILs
}
Maintenant que j'ai essayé strstr,strcmp etc... ne fonctionne pas. Voulais essayer memcmp mais je n'ai pas statique de la len. Comme je l'ai comparer char* char et char* char* j'aurais besoin de deux solutions de droit?
Alors, comment comparer ces pointeurs (en fait pointees) le plus vite possible?
Grâce.
E D I T
Grâce à wallacer et le Code de Singe maintenant pour char* char de la comparaison que j'ai d'utilisation suivantes:
func1(char* ptr){
char someother_char[255];
char *ptr_char = NULL; //I have to strcmp a few values so this is why I initialize it first
...
ptr_char = someother_char;
if (strcmp(ptr,ptr_char) == 0) //gtfo and it does...
...
ptr_char = some2nd;
if(strcmp...
Des suggestions peut-être... (hmm fonction externe pour comparer?)
Suggestion1(par Code de Singe)
#include <stdio.h>
int main(void) {
char tempchar[255];
tempchar[0] = 'a';
tempchar[1] = 'b';
tempchar[2] = '#include <stdio.h>
int main(void) {
char tempchar[255];
tempchar[0] = 'a';
tempchar[1] = 'b';
tempchar[2] = '\0';
char *ptr_char;
ptr_char = &tempchar[0];
printf("%s", ptr_char);
return 0;
}
';
char *ptr_char;
ptr_char = &tempchar[0];
printf("%s", ptr_char);
return 0;
}
Montrez-nous comment vous avez essayé
avez-vous utiliser strcmp() == 0 ou !=0?
J'ai essayé de strcmp() == 0, et maintenant ça fonctionne. Seule chose qui reste est de comparer pointee de char* avec someother_char[255];
Vous semblez nouvelle C et des pointeurs. Pourrais-je vous suggérer de lire le comp.lang.c FAQ, en particulier le chapitre sur les pointeurs et les tableaux? c-faq.com
strcmp
avez-vous utiliser strcmp() == 0 ou !=0?
J'ai essayé de strcmp() == 0, et maintenant ça fonctionne. Seule chose qui reste est de comparer pointee de char* avec someother_char[255];
Vous semblez nouvelle C et des pointeurs. Pourrais-je vous suggérer de lire le comp.lang.c FAQ, en particulier le chapitre sur les pointeurs et les tableaux? c-faq.com
OriginalL'auteur cat9 | 2011-08-19
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
strcmp
. Ne voyant pas comment vous avez essayé de l'utiliser, c'est la façon dont vous devriez utiliser:de faire la comparaison avec un
char
, vous devez promouvoir unchar*
:si vous souhaitez utiliser le
char
tableau alors vous avez de référence:Voir mon edit
C'est intéressant, j'ai essayé ce char ptr = NULL puis dans le code ptr = &someother_char; ce qui a donné l'erreur char()[255] en char*. De toute façon son travail maintenant (w/o referecing... toujours pas de test en réponse à wallacer ci-dessus), mais c'est sexy réponse Code Monkey.
oups, c'est en fait
&char_array[0]
et vous n'avez pas besoin de le mettre ànull
. Voir ici pour un exemple de programme : ideone.com/O4bKtÉpique ... 🙂 les gars Rep +cet homme coz je ne peux pas
OriginalL'auteur
Bien droit au large de la chauve-souris, si vous voulez comparer les pointees, vous avez besoin de déréférencement. Ce moyen de comparer la réelle valeur char, vous devrez appeler
Cependant cela ne comparer que le premier char dans la matrice, ce qui n'est probablement pas ce que vous voulez faire.
De comparer l'ensemble de chose strcmp devrait fonctionner
Assurez-vous que votre autre chaîne est déclaré comme un char*
Plus d'infos: http://www.cplusplus.com/reference/clibrary/cstring/strcmp/
Edit: comme par votre commentaire. en comparant char* et char n'a pas vraiment de sens. L'un est un personnage de la valeur, l'autre est une adresse en mémoire. Le faire le faire, vous pouvez soit déréférencer le char* ou référence à la valeur de la variable.
La première méthode vérifie si les valeurs sont les mêmes. La deuxième vérifie si ptr est en fait pointant vers la mémoire contenant c ie. est un pointeur ptr c
Espère que ça aide
Bien au-dessus tient toujours... je veux comparer pointee de char* à un autre char. Votre code est correct, mais pas une réponse coz je vais comparer première "lettre".
comparer un char* à un char n'a pas de sens. En fait, il échouera toujours, je pense, depuis un char est en général de 8 bits et les adresses mémoire sera généralement soit 32 ou 64 bits selon votre système. un char ne peut être dans la plage de 0 - 255 alors que les adresses de mémoire d'occuper un beaucoup plus grand nombre de la gamme
utiliser le strcmp solution que j'ai fourni. il compare l'ensemble de la chaîne
char* ptr = "omg"; char somechar[4] = "omg"; strcmp(ptr,somechar)? Sera-ce encore de la compilation? Puis-je utiliser des char *ptr_somechar = somechar et ensuite avec strcmp?
OriginalL'auteur wallacer
Utiliser la fonction srtncmp pas srtcmp.
Voir le lien suivant
comparer les chaînes
OriginalL'auteur Ronald
Chaînes sont null. Lorsque vous utilisez ce type de chaînes, ce n'est pas une bonne idée de mélanger avec de la mémoire d'autres fonctions de copie.
Une fois que vous faites le memcpy opération, veuillez noter que la chaîne de destination ne sera pas une valeur null.
comparateur de mémoire est un rapide des opérations. Sinon, yo peut simplement faire une boucle par chaque personnage et de quitter à trouver une différence.
Pour utiliser strcmp, assurez-vous que les deux chaînes sont null. Sinon, il va entraîner une collision.
Je vous suggère d'utiliser les fonctions de chaîne comme strcmp,strlen (), strcpy de traiter avec des cordes parce que pour cela il est effectivement mis en œuvre.
Vous ne pouvez pas comparer les deux pointeurs, sauf si les deux pointeurs sont se référant à la même emplacement mémoire. Pointeur est une adresse d'un emplacement mémoire. Ce que vous voulez vraiment, c'est que, pour comparer le contenu plutôt que de comparer l'adresse où il est stocké. Veuillez utiliser strcmp mais encore une fois je vous mets en garde assurez-vous que c'est une valeur null.
Dans ma compréhension, vous avez besoin seulement de vérifier le premier caractère dans le tampon. Qui peut être fait soit en accédant à pstr[0] ou *pstr c'est à dire si(pstr[0] == 'O') // exit
J'ai de comparer totalité "chaînes" aka des tableaux de caractères...
Voir ce n'est pas possiblec cat9 parce que les pointeurs sont juste contenant une valeur de lieu pas vraiment le contenu. Vous avez la déférence pour voir le contenu. Lorsque vous comparez un pointeur contre quoi que ce soit, vous êtes tout simplement la comparaison d'une adresse de mémoire avec d'autres. Dans le même temps, à l'aide de *ptr sera derefer l'emplacement de la mémoire et d'obtenir le contenu de cet emplacement et comapare. e.g if( ptr == 'c' )// Faux if( ptr == ptr1 ) // l'emplacement de la mémoire de comparaison. rarement utilisé si( *ptr == 'c' )// correct déréférencement du pointeur et de comparer les données.
comment déréférencement et obtenir une gamme complète de caractères(string)?
OriginalL'auteur sarat