Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3133 connectés 

 


Dernière réponse
Sujet : [C++] strcmp(); !!!
gilou

el_gringo a écrit a écrit :

 
 
c quoi la différence entre StrCmp (fonction windows) et strcmp, si ce n'est que l'un est ANSI, l'autre non ? tu connais une raison d'utiliser StrCmp plutot que strcmp ?  




C'est des fonctions de l'API de mon produit, F_StrCmp ... en fait. Ca tient eventuellement compte de l'encodage des chaines (ISOLatin1, Shift-Jis, EUC, UTF-8, ...)
A+,


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
gilou

el_gringo a écrit a écrit :

 
 
c quoi la différence entre StrCmp (fonction windows) et strcmp, si ce n'est que l'un est ANSI, l'autre non ? tu connais une raison d'utiliser StrCmp plutot que strcmp ?  




C'est des fonctions de l'API de mon produit, F_StrCmp ... en fait. Ca tient eventuellement compte de l'encodage des chaines (ISOLatin1, Shift-Jis, EUC, UTF-8, ...)
A+,

juju_le_barbare

el_gringo a écrit a écrit :

 
 
Ms propriétaire, ça veut pas dire qu'il l'a payée. ça veut juste dire qu'elle appartient à un librairie qui fait pas partie des fonctions standards. t'as des tas de librairies gratuites !  




 
yep t'as raison, mon amour !  :love:

El_gringo

juju_le_barbare a écrit a écrit :

 
 
Merci LetoII :jap:
 
Sinon gilou, 10 minutes c'est encore acceptable... Mais tu indiques bien qu'il s'agit d'une fonction propriétaire, tu l'as payée, et dis moi, ça vaut vraiment le coup ???
 
Je veux dire que en gratuit on trouve tant de bonnes fonctions ...
 
bref, @++  




 
Ms propriétaire, ça veut pas dire qu'il l'a payée. ça veut juste dire qu'elle appartient à un librairie qui fait pas partie des fonctions standards. t'as des tas de librairies gratuites !

El_gringo

gilou a écrit a écrit :

Dans le meme genre, ce soir, j'ai passé 10 mn a chercher un bug: j'utilisais une fonction de comparaison proprio a une toolkit, StrEqual, mais j'ai tellement l'habitude d'employer StrCmp que j'utilisais le test comme dans un StrCmp [:nofret]
A+,  




 
c quoi la différence entre StrCmp (fonction windows) et strcmp, si ce n'est que l'un est ANSI, l'autre non ? tu connais une raison d'utiliser StrCmp plutot que strcmp ?

juju_le_barbare

gilou a écrit a écrit :

Dans le meme genre, ce soir, j'ai passé 10 mn a chercher un bug: j'utilisais une fonction de comparaison proprio a une toolkit, StrEqual, mais j'ai tellement l'habitude d'employer StrCmp que j'utilisais le test comme dans un StrCmp [:nofret]
A+,  




 
Merci LetoII :jap:
 
Sinon gilou, 10 minutes c'est encore acceptable... Mais tu indiques bien qu'il s'agit d'une fonction propriétaire, tu l'as payée, et dis moi, ça vaut vraiment le coup ???
 
Je veux dire que en gratuit on trouve tant de bonnes fonctions ...
 
bref, @++

gilou Dans le meme genre, ce soir, j'ai passé 10 mn a chercher un bug: j'utilisais une fonction de comparaison proprio a une toolkit, StrEqual, mais j'ai tellement l'habitude d'employer StrCmp que j'utilisais le test comme dans un StrCmp [:nofret]
A+,
LetoII En C/C++ tout ce qui est différent de 0 est vrai. Par  opposition 0 est faux.
juju_le_barbare

letoII a écrit a écrit :

Heu moi la dernière fois que j'ai mis un == 0 ou un !=0 je me suis fait jetter par mon prof :D
 
si non de toute manière c'est juste une histoire de goût après.  




 
oui bien c'est simple, strcmp(); renvoie un int, donc on teste avec == 0, mais pour un bool c'est true ou false.
 
Au fait je confond toujours, true c'est 0 et false c'est pas 0, ou bien c'est l'inverse ?
Je sais jamais !
 
@++
 
(put1 vous avez de la chance d'avoir un prof pour apprendre le C/C++ ... moi yen a devoir me démerder tout seul :( )

LetoII Heu moi la dernière fois que j'ai mis un == 0 ou un !=0 je me suis fait jetter par mon prof :D
 
si non de toute manière c'est juste une histoire de goût après.
El_gringo

DarkOli a écrit a écrit :

 
 
D'où l'utilité de toujours mettre le '== 0' pour être vraiement sûr de bien interpreter le résultat (ou '!= 0') suivant ce que tu veux faire !!!
 
Certes c'est plus court quand tu mets rien ou quand tu mets '!' devant mais après tu te retrouves souvent avec des erreurs 'évitables'.  




 
Bah, quand on veut tester un int, comme ce que rend strcmp, bien sur. Mais quand on veut tester un BOOL, c 100 fois + clair de ne mettre que la velru à tester.

juju_le_barbare

DarkOli a écrit a écrit :

 
 
D'où l'utilité de toujours mettre le '== 0' pour être vraiement sûr de bien interpreter le résultat (ou '!= 0') suivant ce que tu veux faire !!!
 
Certes c'est plus court quand tu mets rien ou quand tu mets '!' devant mais après tu te retrouves souvent avec des erreurs 'évitables'.  




 :jap:

darkoli

juju_le_barbare a écrit a écrit :

 
 
et merde, je voulais mettre

Code :
  1. if (strcmp(tmp, tmp2))


mais je me suis dit : "ah non je vais pas tomber dans le piège !"
 
et merde ! merci pour chou !  




 
D'où l'utilité de toujours mettre le '== 0' pour être vraiement sûr de bien interpreter le résultat (ou '!= 0') suivant ce que tu veux faire !!!
 
Certes c'est plus court quand tu mets rien ou quand tu mets '!' devant mais après tu te retrouves souvent avec des erreurs 'évitables'.

juju_le_barbare

el_gringo a écrit a écrit :

parce que tu fait le test suivant:

Code :
  1. if (!strcmp(tmp, tmp2))
  2. // ce qui équivaut à: Si strcmp (tmp, tmp2) est FALSE, ...
  3. // FALSE, c'est 0 en fait.
  4. // Et strcmp rend les résultats suivants:
  5. // 0 si les chaines sont identiques.
  6. // Un nb > 0 si tmp > tmp2
  7. // Un nb < 0 si tmp < tmp2.
  8. // Voili.


Et ton défragmenteur !? :D  




 
et merde, je voulais mettre

Code :
  1. if (strcmp(tmp, tmp2))


mais je me suis dit : "ah non je vais pas tomber dans le piège !"
 
et merde ! merci pour chou !

El_gringo parce que tu fait le test suivant:

Code :
  1. if (!strcmp(tmp, tmp2))
  2. // ce qui équivaut à: Si strcmp (tmp, tmp2) est FALSE, ...
  3. // FALSE, c'est 0 en fait.
  4. // Et strcmp rend les résultats suivants:
  5. // 0 si les chaines sont identiques.
  6. // Un nb > 0 si tmp > tmp2
  7. // Un nb < 0 si tmp < tmp2.
  8. // Voili.


Et ton défragmenteur !? :D

juju_le_barbare /*
salut,
 
il y a un bout de temps un gars sur forum.hardware.fr avait demandé le code en C++ pour remplacer
dans un fichier une chaîne de caractère par une autre.
Les paramètres passés sont le nom du fichier, la chaîne originale, puis la nouvelle chaîne.
Voici ce que je lui ai donné, codé vite fait juste pour montrer la piste à suivre.
Seulement comme tout le monde sait, je suis une grosse bite en programmation ;-))
Donc à un moment ça coince, à la ligne où le commentaire est plutôt explicite ^_^
Quelqu'un aurait-il l'obligeance de me dire pourquoi ça marche pas, et comment résoudre le problème ?
Il m'a pas recontacté depuis, c'est juste pour ma connaissance personnelle !
 
Merci d'avance,
*/
 

Code :
  1. //------------------------------------------------
  2. ---------------------------
  3. #pragma hdrstop
  4. #include <string.h>
  5. #include <stdio.h>
  6. #include <fcntl.h>
  7. #include <io.h>
  8. //---------------------------------------------------------------------------
  9. #pragma argsused
  10. void main(int argc, char *argv[])
  11. {
  12. if (argc == 4) //faut mettre les 3 paramètres !
  13. {
  14. int oldlng = strlen(argv[2]), newlng = strlen(argv[3]);
  15. char *tmp, *tmp2 = argv[2];
  16. int fich = open(argv[1], O_RDWR | O_TEXT); //ouvre le fichier (charge en mémoire)
  17. lseek(fich, 0L, SEEK_SET); //positionne le pointeur au début du fichier (SEEK_SET)
  18. while (!eof(fich))
  19.   {
  20.   read(fich, &tmp, oldlng); //on lit
  21.   lseek(fich, -oldlng, SEEK_CUR); //on se repositionne en arrière
  22.   if (!strcmp(tmp, tmp2)) //PQ CA MARCHE PAS ???
  23.    {
  24.    write(fich, argv[3], newlng); //pas super good car si la new chaine est plus longue,
  25.    lseek(fich, newlng, SEEK_CUR); //on se repositionne à la fin     //la suite est écrasée !
  26.    }
  27.   else
  28.    lseek(fich, 1, SEEK_CUR); //on se repositionne 1 caractère plus loin
  29.   }
  30. close(fich); //on ferme ;p
  31. }
  32. }
  33. //------------------------------------------------
  34. ---------------------------


 
 
//@++
 
//juju


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)