Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2827 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] Prise de tête avec un char

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Prise de tête avec un char

n°82333
Alload
Posté le 17-12-2001 à 23:42:37  profilanswer
 

Déjà, est-il possible de mettre plusieurs caractère dans un char?
 
Puis, voilà comment se présente une partie du fichier avec lequel je dois charger le chemin du fichier:
 
*BITMAP "Mon fichier/monfichier.txt" *MAP_TYPE
 
Pour le moment j'utilise ce code:
 
string buffer
ZeroMemory(&buffer, sizeof(buffer));
 
   while (1)
   {
    string buffer2;
    ZeroMemory(&buffer2, sizeof(buffer2));
    file >> buffer2;
    if (buffer2 == "*MAP_TYPE" ) //Car on ne lit alors plus le chemin de la texture
     break;
     
    else
     buffer += buffer2 + " ";
   }
   
   char pPath;
   copy(buffer.begin() + 1, buffer.end() - 2, &pPath); //On enlève les " "
 
Le problème c'est que je ne peux pas charger des chemins de fichiers contenant des espaces. Le deuxième problème c'est que je ne peux pas utiliser un char[] car une fonction que j'utilise demande un char.
 
Donc si vous pouviez m'aider un peu. :)

mood
Publicité
Posté le 17-12-2001 à 23:42:37  profilanswer
 

n°82348
Alload
Posté le 18-12-2001 à 08:31:25  profilanswer
 

Comment faire pour avoir un char* pour une variable qui doit être char[] car elle doit contenir plusieurs caractères?

n°82351
El_gringo
Posté le 18-12-2001 à 08:41:48  profilanswer
 

bah, en fait ça:
char  szChaine[ENTIER];
C exactement la même chose que ça:
char* lpszChaine = malloc (ENTIER);
puis free(lpszChaine); // qd t'en as plus besoin
 
pour accèder aux différente caractères:
szChaine[0] <=> *(lpszChaine)
szChaine[1] <=> *(lpszchaine + 1)
szChaine[i] <=> *(lpszChaine + i);
 
EDIT: mais en fait, ton pb est encore plus simple que je croyais il me semble, en fait quand tu fait
char szChaine[ENTIER];
tu voudrais un char* vers ce char[] !? hé bah szChaine est un char* (il pointe en fait vers szChaine[0]). étonnant, non ?

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

n°82352
Alload
Posté le 18-12-2001 à 08:52:49  profilanswer
 

Oki, bon déjà ça c'est cool.
 
Deuxième problème, j'initialise un char[200] pour être sûr qu'il y aura assez de place pour mettre tout le chemin du fichier, le problème c'est qu'après avoir copier la string dedans, j'ai le chemin du fichier PLUS plein de caractère aléatoire... D'où est-ce que ça peut venir?

n°82354
Alload
Posté le 18-12-2001 à 08:54:22  profilanswer
 

C'est du genre:
 
"C:\Mon Fichier\test.txt" ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ"

n°82356
El_gringo
Posté le 18-12-2001 à 08:56:35  profilanswer
 

tu copies avec quelle commande ?
 
EDIT: logiquement, c pas gênant (si ce n'est que ça fait pas très propre), parce que les fonction de copie vont mettre un '\0' (caractère null) à la fin de ta chaine. toutes les fonctions qui exploitent les chaines de char utilisent ce charactère comme marque de fin de chaine

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

n°82359
Alload
Posté le 18-12-2001 à 08:59:24  profilanswer
 

copy(buffer.begin(), buffer.end(), szPath);

n°82360
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-12-2001 à 09:03:05  profilanswer
 

Alload a écrit a écrit :

Deuxième problème, j'initialise un char[200] pour être sûr qu'il y aura assez de place pour mettre tout le chemin du fichier




 
hum dangereux ça...
normalement c'est [256]

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°82361
El_gringo
Posté le 18-12-2001 à 09:04:14  profilanswer
 

j'connais pas cette fonction, mais ça te pose un pb lors de l'execution le fait qu'il ai rempli ça !?
et si ça te gène vraiement, fait un
memset(szChaine, 0, sizeof (szChaine); // ou un ZeroMemory

n°82363
Alload
Posté le 18-12-2001 à 09:04:38  profilanswer
 

Avec [256] ça fait la même chose, mais si c'est mieux de le mettre à 256 je le met :)

mood
Publicité
Posté le 18-12-2001 à 09:04:38  profilanswer
 

n°82364
El_gringo
Posté le 18-12-2001 à 09:04:56  profilanswer
 

antp a écrit a écrit :

 
 
hum dangereux ça...
normalement c'est [256]  
 
 




tu parles... on s'en tape ça ! 200, 256, c pareil !
c de la maniaquerie de développeur de vouloir absoluement mettre des puissances de 2 !

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

n°82365
Carbon_14
Posté le 18-12-2001 à 09:05:00  profilanswer
 

strncpy, il me semble qu'elle ne met rien à la fin !
Pour certaines fonctions, il faut ajouter le '\0' terminal à la bonne position, sinon chaîne "infinie" en mémoire (y a la zone de mémoire réservée, mais y a pas le "fin de chaîne" qui sert de "butée" ).
 
Pour transformer les chemins longs en chemins courts (avec des ~), il y a une API 32 bits qui sait le faire. On entre le nom long (avec espaces, etc..) et elle code à la mode 16 bits (certaines API n'acceptent pas les noms longs => coïncés sans elle). Faut que je retrouve son nom. Ca m'échappe pour l'instant.

n°82366
Carbon_14
Posté le 18-12-2001 à 09:06:17  profilanswer
 

Il me semble que la longueur maxi est de 256. Si on y arrive mais qu'il n'y a que 200 octets réservés, ça écrase les variables qui suivent en mémoire !!! Vaut mieux trop que pas assez.

n°82367
El_gringo
Posté le 18-12-2001 à 09:07:12  profilanswer
 

la longueur maxi de quoi !?

n°82368
Alload
Posté le 18-12-2001 à 09:07:22  profilanswer
 

Ca marche avec un ZeroMemory(), tain j'aurais du penser que les variables sont jamais initialisées à zéro à part les string... Quel âne desfois.
 
Enfin, merci beaucoup!!! :)

n°82373
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-12-2001 à 09:58:56  profilanswer
 

El_Gringo a écrit a écrit :

la longueur maxi de quoi !?  




 
longueur maxi d'un nom de fichier, répertoire compris !!
c'est pas juste pour dire que c'est une puissance de 2
tu peux mettre 257 je m'en fous.
Si tu ne mets que 200, il se peut que ça plante avec un long nom de fichier, alors qu'avec 256 ça passera. (tiens c'est une limite de la FAT/FAT32, ou une limite dans Windows ? que se passe-t-il en NTFS ?)

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°82376
Carbon_14
Posté le 18-12-2001 à 10:01:17  profilanswer
 

Longueur maxi d'un path + nom de fichier. C'est 128 sous Win16 je crois, 67 caractères max pour un path sous DOS  
 
J'ai un collègue qui a accumulé des sous-sous-répertoires (sous Win3.11) qu'on ne peut même plus sauver because trop de caractères dans les noms et de sous-niveaux :(). C'est le défaut des jeunes qui sont habitués à Win98/2000 dès le biberon :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] Prise de tête avec un char

 

Sujets relatifs
mysql, varchar ou char?Un bon programmeur de C SVP... strcat et char...
Recuperer le code ascii d'un char*[c++] Tableau de char
URGENT PHP : comment forcer une variable a passer en chaine de char ??Classe C++ pour la prise en charge de HTTP et FTP
[c] compter le nombre de char d'un fichierC ANSI et char *
[C++] Comment convertir un double en char?Au sujet de l en tete des fichiers ISO 9660
Plus de sujets relatifs à : [C++] Prise de tête avec un char


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR