Bah oui désolé lol

Résolu
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 16 août 2005 à 23:49
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 17 août 2005 à 10:42
Sincérement désolé d'être une quiche mais bon

Les vacances ça me fait oublier certaines choses (enfaite c'est pas les vacances, c'est juste moi qui sait pas mais chut)

Donc voilà

J'arrive pu à découper une chaine de caractère... :'(



Genre j'ai Buff : "Program Files;C:\Program Files;SoundMan;C:\Windows\SoundMan.exe"

Bé je voudrais extraire tous les termes avant les ;



j'ai bien essayé genre :

char *c = Buff;

while(*c != '\0')

{

while(*c != ';')

{

//La je sais plus lol

c++:

}

c++;

}

J'voudrais bien pouvoir me passer de strch je sais pas trop quoi là :p

Thanks :p

void Aurevoir( void ); //Bonne journée

19 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 00:11
3
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 00:38
T'a corrigé ? Enlève l'étoile devant c



char *c = strtok(Buff, ";");

while( c != NULL) // pas *c

{

MessageBox(NULL, c, NULL, 0x40);

c = strtok(NULL, ";");

}
3
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 09:06
La fonction getline se charge de tout ....



#include<sstream>



int main()

{

std::istringstream is( Buffer );

char c[256];

while( is.getline( c, 256, ';' ) )

MessageBox(0,c,0,...blabla...MFC...

}


Cordialement,
Xterminhate.
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 août 2005 à 23:55
va dépendre de ce qu'il faudra faire des différentes parties.
Prépare un truc bien clair pour demain.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 00:06
Bé en faite j'explique :) lol

Donc ma fonction veut charger toutes les caractéristiques d'un utilisateur

En sachant que les caractéristiques sont le nom des raccourcis et leur chemin

En considérant que dès que je récupere ces 2 caractéristiques, je peux
créer un objet SHORTCUT et l'ajouter à mon utilisateur, je voudrais
tout les 2 ";" découper la partie récupéré en 2 lol

C'est dur à expliquez rolala



Bon genre dans mon fichier il y a "Program Files;C:\Program Files;SoundMan;C:\Windows\SoundMan.exe"



Le programme récupéré la partie Program Files;C:\Program Files

Et le découpéré en 2 jusqu'au ";" pour ensuite créer un objet raccourci :s



Désolé de pas être clair lol

Je crains je sais, je ne me comprend pas moi même alors euh bonne chance :$


void Aurevoir( void ); //Bonne journée
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 00:27
Bé en effet ça marche très bien

Mais il me plante à la fin...

Comprend pas trop



char *c = strtok(Buff, ";");

while(*c != NULL)

{

MessageBox(NULL, c, NULL, 0x40);

c = strtok(NULL, ";");

}
ça viendrait ptete du fait qu'il y'a le caractère ; juste avant la fin non ?
void Aurevoir( void ); //Bonne journée
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 00:33
while (c != NULL) ne déférence pas c
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 00:35
C'est pourtant le même principe que dans l'exemple que tu m'as donné...

C'est étrange lol

void Aurevoir( void ); //Bonne journée
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 00:41
Ah en effet, lol

J'vous en voudrais pas si vous aviez envie de me jeter quelques pierre ;)



Merci bien Mr :p
void Aurevoir( void ); //Bonne journée
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 09:17
Ahhhh lol j'aurais bien essayé mais la vu que tout y marche bien mdr :p

J'ai trop peur :$

Mais en faite je l'avais déjà utilisé une fois et en effet elle marche très bien ;)
void Aurevoir( void ); //Bonne journée
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 09:51
Avec ta dernière réponse, on a vraiment l'impression que tu as écrit un code à la fois robustesse et stable ! ^_^ Bon courage...
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 09:55
On sent de l'ironnie lol, on se fou pas de moi hein :p

D'abord j'fais pour que le prog marche :)

Ensuite, on voit l'optimisation :D

void Aurevoir( void ); //Bonne journée
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 09:56
Comme d'habitude la question est de savoir si c'est du C ou du C++,
quand je vois des chaines C c'est du C pour moi alors je donnes la
solution en C
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 10:02
Stevy > Par défaut, je crois que tu peux filer la solution C++ parce que quasiment plus personne n'utilise un compilateur pur C...

Jorky > Fait nous un jolie topic unique à la Jorky's touch.

Balance tout le code d'un coup, voire dit nous ce que tu veux faire globalement. Ca t'évitera de devoir découper ton code en petits fragments et faire de multiples posts ;-) Je plaisante....
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 10:06
strtok devrait être banni, ça insère des variables implicites dans le prog "à l'insu de notre plein gré" et c'est source de plantage, par exemple appels simultanés en multi threading.
Se fera bien plus surement avec 2 pointeurs et rien de plus.

ciao...
BruNews, MVP VC++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 10:11
strtok n'est pas threadsafe, c'est écris dans la doc il me semble.
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 10:13
En effet, on oublit souvent de bien vérifier que les algorithmes de base ne sont pas systématiquement thread safe....
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 10:33
Exemple à la va vite:

// MODIFIE LA CHAINE EN PARAM !!!
void __stdcall Morceaux(char *psz)
{
char *c, *p, *out;
out = psz + strlen(psz);
p = psz;
while(*p == ';') p++; // ON NE SAIT JAMAIS
if(!*p) return;
nextPASS:
c = p;
while(p < out) {
if(*p == ';') break;
p++;
}
*p = 0;
MessageBox(0, c, "R", 0);
if(++p < out) goto nextPASS;
}


int WINAPI WinMain(HINSTANCE h, HINSTANCE x, LPSTR y, int z)
{
char buf[80];
strcpy(buf, "Program Files;C:\\Program Files;SoundMan;C:\\Windows\\SoundMan.exe");
Morceaux(buf);
return 0;
}

ciao...
BruNews, MVP VC++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 10:42
Pour que ce soit modulable faudrais carrement retourner un char** et
une taille, et faire ca proprement en C (avec tout les controles
d'erreurs) c'est tres laborieux.

Faut voir strtok_r et strsep de la glibc.
0
Rejoignez-nous