begin process at 2012 05 30 11:28:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

sprintf récalcitrant


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

sprintf récalcitrant

mercredi 2 mars 2005 à 18:18:07 | sprintf récalcitrant

myrion

Bonjour,

Je suis assez une pine en C alors évitons les railleries! Merci

Voici ma question... Lorsque je fais:
char* extension
extension = "txt";
sprintf(buff, "(*.%s)\0*.%s\0\0", extension, extension);

je m'attends à ce que buff contienne "(*.txt).txt"... mais voilà, il n'a que "(*.txt)"!

Quelqu'un peut m'expliquer??

Merci d'avance,
myrion
mercredi 2 mars 2005 à 18:19:02 | Re : sprintf récalcitrant

myrion

j'oubliais: j'initialise buff ainsi: char buff[255] = {0};
mercredi 2 mars 2005 à 18:43:20 | Re : sprintf récalcitrant

yserver

Que vient fait le \0, si je me trompe pas il indique la fin d'une chaine. Tout char * est une chaine de caractere qui se termine par le caractere nul. Donc lorsque la valeur est lu est est lu jusqu'au permier \0 trouvé normal.

Il faut voir ta variable comme ca char * buff[255] et tu lis char [0] et char[1] qui donne :
char [0] = (*.txt) et char[1]=*.txt
mercredi 2 mars 2005 à 18:50:32 | Re : sprintf récalcitrant

myrion

Merci pour ta réponse

En fait, je veux choisir un type d'extension autorisé pour sauvegarder un fichier.

Si c'est un txt à tous les coups, je peux mettre sOpenFile.lpstrFilter = "File (*.txt)\0*.txt\0\0"; et tout beigne, mais là, l'extension est donnée en paramètre...
mercredi 2 mars 2005 à 19:11:11 | Re : sprintf récalcitrant

ymca2003

A la place de '\0', met un caractère comme '|'. Formate ton filtre des extensions puis remplace les '|' par des '\0'.
mercredi 2 mars 2005 à 19:13:18 | Re : sprintf récalcitrant

yserver

La desolé je peux plus t'aider sOpenFile.lpstrFilter je connais pas.
Les \0 me laisse perplexe mais je connais pas cette structure.
Eventuellement donne plus d'info mais je suis pas sure de pouvoir t'aider pour la suite.

Bon courrage
mercredi 2 mars 2005 à 19:16:54 | Re : sprintf récalcitrant

myrion

Me suis trompé! sOpenFile c'est OPENFILENAME

Voici un bout de la structure (j'ai du trouver ça sur ce site d'ailleur)

OPENFILENAME sOpenFile;
    char szPath[MAX_PATH + 1];
    BOOL bRet;
    HWND hCtrl;
    int i;
    char* buff = NULL;

    szPath[0] = '\0';
   
    //Initialise la structure
    ZeroMemory(&sOpenFile,sizeof(OPENFILENAME));
    sOpenFile.lStructSize = sizeof(OPENFILENAME);
    sOpenFile.hwndOwner = hParent;
   
    // choix des extensions
    if(extension == 0)
    sOpenFile.lpstrFilter = "File (*.*)\0*.*\0\0";
    if(extension == 1)
    sOpenFile.lpstrFilter = "Bitmap (*.bmp)\0*.bmp\0\0";
   
    sOpenFile.nFilterIndex = 1;
    sOpenFile.lpstrFile = szPath;
    sOpenFile.nMaxFile = MAX_PATH + 1;
    sOpenFile.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST |
        ((bOpen)? OFN_FILEMUSTEXIST : OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT);

...

 Mon but est d'avoir en paramètre l'extension qui va dans  sOpenFile.lpstrFilter = "File (*.*)\0*.*\0\0";
mercredi 2 mars 2005 à 20:11:53 | Re : sprintf récalcitrant

myrion

Salut ymca2003,

Si je fais ce que tu me dis, j'ai :
sprintf(buff,"(*.%s)|*.%s||",ext,ext);
    for (i=0;i<strlen(buff);i++){
        if (buff[i] == '|') buff[i] = '\0';}
            sOpenFile.lpstrFilter = buff;

Mais ça change rien au problème!

Si je regarde sur msdn (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/
commondialogboxlibrary/commondialogboxreference/commondialogboxstructures/openfilename.asp)  il est dit pour lpstrFilter : "
Pointer to a buffer containing pairs of null-terminated filter strings." Donc j'échappe pas à \0

Il doit donc bien y avoir un truc pour passer en paramètre des retour de ligne (\0) ?


jeudi 3 mars 2005 à 08:55:00 | Re : sprintf récalcitrant

ymca2003

Réponse acceptée !
// on remplace les caractères '|' par des caractères '\0'.
 LPTSTR pChar = szFilter;
 while((pChar = _tcschr(pChar, '|')) != NULL)
  *pChar++ = '\0';
jeudi 3 mars 2005 à 08:56:50 | Re : sprintf récalcitrant

ymca2003

szFilter est bien sûr le filtre formatté avec des '|' (ne pas oublier d'en mettrre un à la fin pour avoir 2 '\0' au final.
_tcschr est équivalent à strchr.

1 2

Cette discussion est classée dans : txt, extension, sprintf, buff, récalcitrant


Répondre à ce message

Sujets en rapport avec ce message

A quoi sert "%3ld" dans la fonction sprintf ? [ par XKaliBur ] Voila comme le titre l'indique j'aimerais savoir ce que fait "%3ld" dans le code suivant : #include void main() {     int compteur=188;     char out sprintf en c [ par tahsgh ] Bonjour, j'ai un problème, la fonction 'sprintf(buf3,"readelf -S %s>readelfdoc.txt",name);' ne fait pas la redirection du résultat de la commande au f rechercher un mot dans un fichier txt [ par tanguy704 ] Bonjour Je suis entrain de réaliser un jeu genre scrabble. Les mots valides proposés par les joueurs sont stockés dans un fichier txt un mot par lign Lecture ligne par ligne de fichier txt en C++pour re-jeu de données Temps Reel [ par DamienR83 ] Bonjour, Je souhaite faire une API en C++ avec un affichage de données en "pseudo temps-réel". L'ensemble des mes données sont déjà enregistrées par error C2106: '=' : l'opérande gauche doit être une l-value [ par sarahim ] svp aide moi,je travail avec le visual studio c++ windows forms,depuis hier jarrive pas aresolu cette erreur (error C2106: '=' : l'opérande gauche doi Tuer programme récalcitrant avec Taskkill [ par balthazariv ] Bonjour, J'ai un programme qui reste actif car inexistence d'une commande quitter ou de la fameuse croix rouge que l'on connait bien. Ma seule soluti Programmation C++ [ par zizouy ] Salut, quelqu'un peut m'aider à ajouter l'extension d'un document lors de l'enregistrement: j'ai un logiciel qui fait la modélisation d'un système séq Crée un fichier .txt contenant un code source [ par mrcho77 ] Bonjour, Voilà tout, je dois créer un fichier .txt en langage C (jusqu'ici ca va) Dans le fichier .txt il devrai apparaître un code source html ( c' extension .ncb [ par chiro2000 ] Bonjour je suis entrain de corriger quelques erreur sur un logiciel et j ai le problème suivant: Parmi les beugs qu'on m'a demande de corriger: lors d boucle fopen [ par vercd7am ] Bonjour, j'aurai aime savoir comment faire un boucle de fopen. Voila pour l'instant ce que j'ai [code=cpp]FILE* fichier = NULL; // nombre de points


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales