Problème avec strncpy

cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007 - 21 oct. 2004 à 21:49
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 22 oct. 2004 à 00:06
Bonjour,

Voilà j'ai réexaminé mon problème concernant le champ ofn.lpstrFile et j'ai compris le problème :

Je commande strncpy(t,&ofn.lpstrFile[i],1); , avec t caractère et ofn.lpstrFile LPSTR.
t reçoit un premier caractère du champ ofn.lpstrFile, bien logiquement, par contre &ofn.lpstrFile RECOIT AUSSI QUELQUE CHOSE à l'indice 945.

Pourquoi donc?

Merci de votre réponse !
A voir également:

12 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
21 oct. 2004 à 22:05
char *strncpy( char *dest, const char *src, size_t num );

t est un caractere ??

et oubli pas que strncpy n'ajoute pas de '\0'
0
cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007
21 oct. 2004 à 22:27
Oui t est bien un caractère
0
cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007
21 oct. 2004 à 22:28
Enfin non une chaîne d'un caractère...
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
21 oct. 2004 à 22:31
&ofn.lpstrFile[i] est const donc montre plus de code, l'erreur est ailleur

et pense à faire plutot

t[0] = ofn.lpstrFile[i];
0

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

Posez votre question
cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007
21 oct. 2004 à 22:36
bon voici le code bien dur, attention les yeux
int i=0,j=0;
path[0]='\0';
  if(GetOpenFileName(&ofn))
    {
      hm=0;
      char t[0];
      t[0]='a';
      while(t[0]!='\0')
{
  strncpy(t,(char*)&ofn.lpstrFile[i],1);
  strcat(path,t);
  i++;
}
      i=0;
      while(strcmp((char*)&ofn.lpstrFile[i],"\0")!=0)
{
  songs[j][0]='\0';
  char t[0];
  t[0]='a';
  while(t[0]!='\0')
    {
  	  strncpy(t,(char*)&ofn.lpstrFile[i],1);
      strcat(songs[j],t);
      i++;
    }
  j++;
}


Il s'agit de transférer le contenu d'une liste de fichiers d'un openfilename dans un tableau songs[MAX_PATH][MAX_SONGS]
0
cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007
21 oct. 2004 à 22:37
t[0]=ofn.lpstrFile[i]; ne fonctionne pas
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
21 oct. 2004 à 22:45
t[0]=ofn.lpstrFile[i]; ca fais la meme chose que ton strncpy

char t[0]; oui

while(strcmp((char*)&ofn.lpstrFile[i],"\0")!=0)

> while( ofn.lpstrFile[i] )

tout est a revoir

ca te sort quoi openfilename ?
0
cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007
21 oct. 2004 à 22:56
En fait ça me donne un tableau de caractères formée de plusieurs chaînes en vrac séparées par des \0 !

Le hasard fait bien les choses, pas Microsauce.
(bon on ne cite pas des noms de sociétés dans les forums).
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
21 oct. 2004 à 23:03
ofn.lpstrFile contient les chaines (terminées par 2 '\0' )

size_t i = 0;
char *p = ofn.lpstrFile;

while( *p )
{
strcpy( songs[i], p );
while( *p++ );
i++;
}

apres faudrais fairee un controle MAX_SONGS
0
cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007
21 oct. 2004 à 23:07
bon. Merci !! je vais voir ceci de plus près
0
cs_LiBe444 Messages postés 220 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 7 avril 2007
21 oct. 2004 à 23:16
Ton algortihme est simple, clair et parfait.

Le problème est toujours là, mais il doit intervenir avant.

COmment initialise-t-on le champ lpstrFile avant l'appel à GetOpenFileName ?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 oct. 2004 à 00:06
exemple msdn

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
//
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
//
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
0
Rejoignez-nous