begin process at 2012 05 30 15:49:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

MFC

 > 

Retourné un tableau dans une focntion???


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

Retourné un tableau dans une focntion???

mardi 2 janvier 2007 à 13:26:19 | Retourné un tableau dans une focntion???

nerone21

Bonjour,

alors voici mon probleme, et ma fonction:

char *ConcatNom(char NomFichier[MAX_PATH])
{
    int taillefile=strlen(NomFichier);
    char nomfichier[255]={NULL};
    for(int nomFile=taillefile;nomFile>1;nomFile--)
    {
        if(NomFichier[nomFile]=='\\')
        {
            nomFile++;
            for(nomFile,posnom=0;nomFile<taillefile,posnom<taillefile;nomFile++,posnom++)
            {
                if(NomFichier[nomFile]!='0')
                    nomfichier[posnom]=NomFichier[nomFile];
            }
            nomFile=0;
        }
    }
    return nomfichier;
}

en bref elle recoit un chemin en entrée, et a la fin elle doit me renvoyer juste le nom du fichier...
ma fonction marche parfaitement le probleme vient lorsqu'elle me renvoi le "nomfichier".

j'utilise cette fonction a cette occasion:
SendDlgItemMessage (hWndResults, IDC_LISTESUPPR, LB_ADDSTRING, (WPARAM) 0, (LPARAM) (LPCTSTR)ConcatNom(strNomFichier) );

et donc le probleme, c'est que les caracteres que je recois dans ma listbox sont d'une part incomprehensible et ne sont pas ceux ke j'attend, alors si quelqu'un a une idée voire même la solution a mon probleme, je suis preneur car ca doit faire deux heures ke je m'arrache les cheveux la dessus.

merci par avance...
mardi 2 janvier 2007 à 13:42:41 | Re : Retourné un tableau dans une focntion???

yann_lo_san

Tu peux aussi utiliser :
PathFindFileName(lpStrFichier)   // comme ta fonction
PathFindExtName(lpStrFichier)   // que l'extension

mardi 2 janvier 2007 à 13:47:52 | Re : Retourné un tableau dans une focntion???

yann_lo_san

En plus tu renvois un pointeur local à ta fonction, ça marcherait mieux en passant un buffer que la fonction remplirait.

ex :

char *ConcatNom(char NomFichier[MAX_PATH], char buffer[])
{
 
   // char nomfichier[255]={NULL}; devient buffer
    // c'est l'appelant qui alloue le buffer
   
   return buffer;
// quant même le retour buffer
}

parceque à mon avis tu te sert directement de ce pointeur au retour, c'est là que ça doit clocher.

mardi 2 janvier 2007 à 13:58:58 | Re : Retourné un tableau dans une focntion???

racpp

Administrateur CodeS-SourceS
Salut,
On peut retourner le pointeur sur le caractère qui suit le dernier "\" du chemin. Voici un petit exemple:
char *ConcatNom(char* NomFichier)
{
    int taille=strlen(NomFichier);
    while(NomFichier[taille]!='\\') taille--;
    taille++;
    return NomFichier+taille;
}

Cette fonction prend comme paramètre le pointeur sur le premier caractère du chemin et renvoie le pointeur sur la première lettre du nom. Le buffer contenant le chemein doit être déclaré en global ou en static dans la fonction appelante.

mardi 2 janvier 2007 à 17:04:55 | Re : Retourné un tableau dans une focntion???

SAKingdom

Membre Club

Salut racpp. Ta fonction retourne un pointeur sur le premier caractère du nom du fichier c'est bien ça? Dans ce cas, y'a sûrement un meilleur moyen de faire que d'appeler strlen. J'avais fais un snippet la dessus ici:

char *FileName (char *path)

{

    char *c = path, *ret = path;

    if(c == 0) return 0;

    while(*c)

    {

        if(*c == '\\')  ret = c+1;

        c++;

    }

    return ret;

}

Même principe mais on parcours une seul fois la chaîne.

Et puis d'ailleurs:
int taille=strlen(NomFichier);
while(NomFichier[taille]!='\\') taille--;
Tu commence à chercher en dehors du buffer :S


C++ (@++)

mardi 2 janvier 2007 à 17:13:34 | Re : Retourné un tableau dans une focntion???

SAKingdom

Membre Club
"int taille=strlen(NomFichier);
while(NomFichier[taille]!='\\') taille--;
Tu commence à chercher en dehors du buffer :S"

J'ai rien dit. J'avais oublié. strlen retourne "longeur de chaine-1" du au caractère de fin de chaine. Honte à moi.

C++ (@++)

mardi 2 janvier 2007 à 17:16:19 | Re : Retourné un tableau dans une focntion???

vecchio56

Administrateur CodeS-SourceS
On peut aussi utiliser strrchr qui est censée être optimisée

while(NomFichier[taille]!='\\') taille--;
> Attention aussi au cas ou on ne trouvera jamais de '\\'
_____________________________________
Un éditeur de ressources gratuit pour Windows

mardi 2 janvier 2007 à 17:51:05 | Re : Retourné un tableau dans une focntion???

racpp

Administrateur CodeS-SourceS
Sakingdom >> C'est vrai que c'est mieux d'éviter strlen(). J'ai fait ce petit code en quelques secondes à partir du code présenté par l'auteur de la question. Cette fonction est donc à améliorer.
Avec while(NomFichier[taille]!='\\') taille--; la recherche commence depuis le zéro final de la chaine. Ce dernier fait donc bien partie du buffer mais n'est pas pris en compte par strlen() qui retourne le nombre de caractères affichables.

mardi 2 janvier 2007 à 19:52:25 | Re : Retourné un tableau dans une focntion???

yann_lo_san

Version avec strrchr :

size_t
result;
char* lpStr = 0;
lpStr = strrchr(szNomFichier, '\\');
 
if( lpStr )
     result = (lpStr-szNomFichier)+1;   // nom fic commence a result
else
     result = 0;  // on a pas trouvé


Cette discussion est classée dans : fonction, probleme, char, nomfichier, nomfile


Répondre à ce message

Sujets en rapport avec ce message

Probleme de char [ par ph0ton ] J'ai un probleme avec une condition.Je m'explique :J'ai une variable : char Fonction[30];Je rempli la variable grace a la lecture d'un fichier.Ensuite probleme avec char et strcat :'( [ par paulina82 ] bonjour a tous. j'ai un probleme avec char er stract. enfaite j'ai fais 2 fonction. la 1ere qui doit initialisé un tableu avec une chaine de caracter probleme d'allocation [ par littledrummer ] bonjour à tous.J'ai un petit souci avec une allocation mémoire lorsque j'execute le code suivant:string nomfichier="";cin>>nomfichier;<fon conversion double en char* [ par snakers07 ] bonjour, voici mon probleme void grilleSetText(ligne,colonne,char*Text;) est une fonction comme ont peut le voir qui pren en parametre char*or j'ai un problème de fonction de tirage aléatoire en poker [ par moonlight2509 ] Salut, étant en débutant en langage c mon problème paraît peut-être très bête!! Voilà j'ai un problème d'argument ou de type de fonction dans la fonct Probleme pour integrer Upload Ftp ^^' [ par inf12 ] Bonjour tous le monde j'ai un soucis avec ce code  ^^' :#include int test(netbuf *conn){                char* serveur = "ftp.tonserveur.com";        c fonction system() accès refusé [ par fratleym ] Bonjour,oui je sais, la fonction system() c'est horrible mais bon là, je l'utilise surtout pour que ceux qui reprendront le code sachent à peu près ce Fonction Strcat [ par ydu ] Bonjour,j'utilise dev C++, vous trouverez ci-dessous une partie de mon code et la compil bloque sur la fonction StrcatPouvez vous me dire ce qui ne va Pointeur sur char [ par wislam2007 ] salut j'ai un variable de type char, et une fonction qui retourne un pointeur sur un caractère (char), comment faire pour affecter le retour de la fon Probleme : creation d' une interface graphique par dll ... :-s [ par GeroXXXX ] Bonjour a tous :) Alors voici mon problème... Je suis actuellement sur la création d' un plugin en c++ ( dll ) pour Xchat : http://www.ircfr.com/code


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,952 sec (4)

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