Y a une fonction qui agit comme Mid en VB ? [C++] - C++ - Programmation
Marsh Posté le 23-10-2001 à 14:10:14
Bien sur...
Avec les MFC, tout est possible
la classe CString dispose de la méthode Mid( int nFirst, int nCount ).
du coup, tu fais:
CString strTachaine = "salut";
strTachaine.Mid(2,4) rend une CString qui contient "alu" ... c t'y pas beau ça !?
Marsh Posté le 23-10-2001 à 14:18:27
'tain c'est super cool mais j'utilise pas les MFC.
Je peux quand meme utiliser ca si j'ai fait un projet dll APiWin32 ?
parce que sinon j'etais parti sur une bonne voie (pour une fois)
Marsh Posté le 23-10-2001 à 14:19:54
par contre le pb c'est que mes chaine sont declarees en char [255] et pas en Cstring.
Marsh Posté le 23-10-2001 à 14:22:53
En + j'y connais vraiment que dalle aux MFC, tlm me dit que c'est bien mais je m'y suis toujours pas lance.
Ca fait peur de se lancer quand on connait rien
Marsh Posté le 23-10-2001 à 14:27:33
c vraiement tout simple... si t'as le même compilo que moi (VC++), je t'explique comment faire un projet MFC en 2 secondes (seul pb, y faudra te démerder pr récupérer ce que t'as déja fait jusqu'a maintenant, chose qui devrait pas ê dur du tout !)
Marsh Posté le 23-10-2001 à 14:29:17
ça c si tu veux apprendre les MFC maintenant... par contre, si ton projet est important, et que t pressé, y a une classe string, on dit que c un template, enfin, j'crois... En fait, g jammais utilisé la classe string... d'ailleur, si qqn en passant peux aussi me dire comment on utilise ça... par curiosité !
Marsh Posté le 23-10-2001 à 14:37:40
Ben pour les MFC ca m'interesserait si tu pouvais m'expliquer, mais pas forcement pour le projet la, plutot pour les suivants parce que celui la doit etre fini pour vendredi et j'ai un peu peur de me lancer dans les mfc, et pas reussir a continuer ce que je dois faire. (je sais pas si j'ai ete clair sur la coup la )
On peut vraiment tout faire avec les MFC ?
Comme si on programmait ?
des dll aussi je crois ?
Pour Mid j'me suis fait ca, pas trop dur mais bon...
char* Mid(char *chaine, int debut, int longueur)
{
char *ptr;
char result[200];
strcpy(result, "" );
ptr = &chaine[debut - 1];
strncpy(result, ptr, longueur);
return result;
}
Marsh Posté le 23-10-2001 à 14:42:10
ouais, ta fonction, g pas détaillé, ms j'imagine que ça marche...
Pour les MFC, tu m'as pas répondu... t'as Visual C++ !?
Marsh Posté le 23-10-2001 à 14:46:05
ah oui excuse.
Ouais je bosse sous Visual C++ 6.0, edition professionnelle
Marsh Posté le 23-10-2001 à 14:55:36
ok... alors pour utiliser les mfc, y faut que, quand tu créés ton nouveau projet, au lieu de Win32 application, tu choisis MFC Wizard... y va te poser 2, 3 questions sur ce que tu veux faire; et, hop, la magie des MFC commence (j'en fait peut être un peu trop là ! ). Après, vu que j'imagine que t'as la doc MSDN, j'te propose de regarder dedant; les classes de la MFC commencent toutes par C... comme CString.
Marsh Posté le 23-10-2001 à 15:06:51
Ok ben jusque la c'est pas trop dur.
J'ai pas le temps pour l'instant de matter tout ca mais j'y passerai surement une partie de mon week end (mais pas trop quand meme )
Merci
Si j'ai besoin d'aide je referai monter le topic, a moins que t'ai d'autres infos
Marsh Posté le 23-10-2001 à 15:17:40
ms franchement, utiliser les MFC, ça simplifie plus que ça ne complique, tu verras...
Ouais, le dimanche, quand on est plus capable de faire autre chose que rester chez sois... la prog, ça passe !
[edtdd]--Message édité par El_Gringo--[/edtdd]
Marsh Posté le 23-10-2001 à 15:28:04
Pour utiliser la classe CString ya pas besoin de créer un projet MFC!! (et heureusement)..
Tu fais un include <afx.h> et pi c tout!!
Marsh Posté le 23-10-2001 à 15:35:08
ha, je savais pas ça... j'me doutais bien qui avait un moyen des les utiliser sans créer de projet MFC... et c quoi la différence entre stdafx.h, et afx.h ? et winbase.h il est inclus dans les afx.h, c ça !?
Marsh Posté le 23-10-2001 à 16:02:12
Alors en STL ca donne
#include <string> // sans .h je confirme...
using namespace std; //je sais c'est un peu barbare
void mid(const char *init,int from,int length, char* result)
{
string tempo = string(init).substr(from, length);
strcpy(result,tempo.c_str());
}
ou string(init) cree une string a partir du char* init
substr cree la sous chaine que j'assigne a tempo.
puis je convertis tempo en char (methode c_str()) pour le recopier dans result...
ATTENTION ta methode ne marche pas...
Citation : char* Mid(char *chaine, int debut, int longueur) |
En effet result est une variable locale qui est detruite a la fin de ta methode, or le pointeur que tu renvoie pointe toujours dessus, moralite il pointe n'importe ou...
Bien sur dans la plupart des cas cette zone n'aurra pas ete reutilise, et donc cela marchera, mais si elle a ete reutilise... enfin tu me comprends...
Certains compilos mettent un warning... pas tous...
[edtdd]--Message édité par BENB--[/edtdd]
Marsh Posté le 23-10-2001 à 16:15:46
Ben merci
Heureusement que tu me le dis, en effet mon compilo m'a prevenu, mais y a tellement de warnings
J'vais essayer d'arranger tout ca
Marsh Posté le 23-10-2001 à 16:20:25
y faut éviter d'avoir plein de warning ...
même si y a des petits truc inutils à faire; fait les pour faire plaisir au compilo et pr plus avoir ces warnings; c plus propre, et qd y a une VRAI warning au moins, tu le sais ! c pas pour les chien les warnings (de toute façon y comprendraient même pas ces cons d'animaux !)
[edtdd]--Message édité par El_Gringo--[/edtdd]
Marsh Posté le 23-10-2001 à 16:21:11
Godbout a écrit a écrit : Ben pour les MFC ca m'interesserait si tu pouvais m'expliquer, mais pas forcement pour le projet la, plutot pour les suivants parce que celui la doit etre fini pour vendredi et j'ai un peu peur de me lancer dans les mfc, et pas reussir a continuer ce que je dois faire. (je sais pas si j'ai ete clair sur la coup la ) On peut vraiment tout faire avec les MFC ? Comme si on programmait ? des dll aussi je crois ? Pour Mid j'me suis fait ca, pas trop dur mais bon... char* Mid(char *chaine, int debut, int longueur) { char *ptr; char result[200]; strcpy(result, "" ); ptr = &chaine[debut - 1]; strncpy(result, ptr, longueur); return result; } |
Salut,
Il y a 2 problèmes avec ta fontion Mid :
- strncpy n'ajoute pas le 0 en fin de chaîne, donc la fin de chaîne n'est pas marquée !
- return result; NON car lorsque tu quittes Mid, le tableau result[200] n'existe plus et on a plus le droit d'y acceder. Si tu veux faire cela, il faut déclarer le tableau en static char result[200];
Voila une fonction mid toute simple.
A+
----------------------
#include <string.h>
void mid(char *ch, int deb, int nb, char *result)
{
strncpy(result,ch+deb,nb);
result[nb]=0;
}
main()
{
char buf[256];
mid("salut",2,4,buf); // la chaîne résultat (buf) doit avoir une taille suffisante
printf("%s\n",buf);
}
[edtdd]--Message édité par tfj57--[/edtdd]
Marsh Posté le 23-10-2001 à 16:29:51
Oulah vous me faites peur la !!
J'ai vraiment l'impression de programmer comme une merde
Marsh Posté le 23-10-2001 à 16:34:05
hé...le C c subtil. Si t'as l'habitude du VB, ça doit faire bizard au début. Ms on s'y fait... on fini même desfois par aimer ça !
Marsh Posté le 23-10-2001 à 16:37:37
Ben le pb c'est que j'ai commence le C y a deux ans a l'iut, mais c'est vrai que niveau pointeur j'etais une merde et j'aimais pas trop ca.
Mais je pense que quand ca va venir je vais apprecier, mais pour l'instant j'ai l'impression de faire un paquet de conneries !!
Marsh Posté le 23-10-2001 à 16:40:47
T'aurais jammais du faire de VB...
Quoi qu'avec les MFC c ûn peu le même pb: c trop "simplifié" et du coup, si on doit s'en passer, on est plutot emmerdé ! ça va m'tomber sur le gueule un jour, c sur
Marsh Posté le 23-10-2001 à 16:44:15
Godbout > aller on te soutiens, tu vas y arriver...
le C c'est comme le velo on n'oublie pas, mais il faut se remettre en jambes...
El_Gringo > Depuis le temps que je te dis d'oublier les MFC...
vive wxWindows et la STL !!!
Marsh Posté le 23-10-2001 à 16:47:51
Ben le pb c'est que quand t'as mal appris a faire du velo c'est dur de se corriger !!
Les MFC c'est pas bien ??
Marsh Posté le 12-11-2001 à 18:24:50
El_Gringo
et c quoi la différence entre stdafx.h, et afx.h ?
afx.h est une include normale des MFCs.
stdafx.h est juste une file générée par un wizzard pour précompiler un projet spécifique (et c assez foireux pour la reconnaissance des changements).
et winbase.h il est inclus dans les afx.h, c ça !?
Je pense.. À vérifier..
Marsh Posté le 23-10-2001 à 13:52:32
C'est a dire si on a:
chaine = mid("salut", 2, 4)
chaine contient alors "alu".
Merci