Conversion d'un char[] en char*puis stocké en char*[]
Saigonoseme
Messages postés2Date d'inscriptionvendredi 31 août 2007StatutMembreDernière intervention 7 juillet 2010
-
6 juil. 2010 à 16:38
Saigonoseme
Messages postés2Date d'inscriptionvendredi 31 août 2007StatutMembreDernière intervention 7 juillet 2010
-
7 juil. 2010 à 10:27
Bonjour à tous,
J'ai un petit souci de conversion d'une chaîne de caractère dans un tableau de chaînes de caractère !!!(tAgTabTrame). (C'est pas agréable à dire çà !)
Le petit programme suivant (extrait) lit un fichier .csv, il concatène dans un char* (Datatxt) les caractères lus (ch).
Une fois le ';' détecté, il insère Datatxt dans le tableau de char* (tAgTabTrame) à un index (CptData)
Seulement l'affectation
[b]tAgTabTrame[CptData] = Datatxt ;
ne fonctionne pas !
L'affectation suivante : tAgTabTrame[CptData] = "Salut !" fonctionne bien...
et à l'affichage, printf("Datatxt : %s", Datatxt);
affiche correctement ma chaîne !
Est-ce que quelqu'un peut m'aider ! Merci beaucoup, beaucoup d'avance !
Phil
// Extrait du fichier .csv -----------
*CLS\n;
SYSTem:COMMunicate:LAN:TELNet:WMESsage?\n;
MEAS:VOLT:DC?\n;
MEAS:VOLT:AC?\n;
// -----------------------------------
void LectureFichierCSV(void)
{
char *tAgTabTrame[50];
char ligne[2000];
char ch = 'a';
char Datatxt[1000];
bool Next ;
//char * s="TEST";
//ouverture du fichier depuis /harddisk/prgrm/ (QNX)
FILE * fp=fopen("AGI_Database.csv","rb");
// écriture du fichier
if (fp!=NULL)
{
printf("Debut de lecture du fichier Database: \n");
int cptchar 0; int CptData 0 ;
sprintf(Datatxt,"%s", "");
while(fgets(ligne, sizeof ligne, fp) != NULL)
{
cptchar = 0 ;
Next = false ;
do
{
ch = ligne[cptchar++];
if((ch '\n') || (ch '\r'))
break;
if(ch == ';')
{
CptData = CptData + 1;
// La ligne qui pose problème !
tAgTabTrame[CptData] = Datatxt ;
printf("%i : %s\n",CptData, Datatxt);
sprintf(Datatxt,"%s", ""); // réinitialise le char*
Next = true ;
} // Fin du if(ch == ';')
else
sprintf(Datatxt,"%s%c",Datatxt, ch); // concaténation
}// do
while (!Next);
} // While
printf("Nombre de trame lues : %i, CptData);
printf("Fin de lecture du fichier Database: \n");
fclose(fp);
}
}
A voir également:
Conversion d'un char[] en char*puis stocké en char*[]
manudiclemente
Messages postés14Date d'inscriptionvendredi 14 mai 2010StatutMembreDernière intervention 9 mars 2011 6 juil. 2010 à 19:48
Les char* en C, c'est la misère ^^
En général, pour ce genre de situation, il faut utiliser les fonctions de la bibliothèque <string.h> (ou <cstring> si on est en C++).
Dans ce cas, je pense qu'il faut utiliser la fonction strcpy() mais est-ce que ca va marcher vu que c'est un char** ?
Sinon, puisqu'on est en C++, pourquoi ne pas utiliser les conteneurs de la STL? Un std::vector<char*> me parait plus approprié pour ce genre de tableau!
Saigonoseme
Messages postés2Date d'inscriptionvendredi 31 août 2007StatutMembreDernière intervention 7 juillet 2010 7 juil. 2010 à 10:27
Bonjour,
Merci pour vos réponses rapides !
Il y a pleins de possibilité pour écrire ce bout de code (et plus facilement...) mais j'utilise un compilateur C->QNX dont je n'ai que peu de bibliothèques pour le link... donc utilisation de fonction de base C.
Oui, j'ai remarqué hier soir que le problème se situait sur l'adressage de Datatxt (via bidouillage malloc/strcat)
tAgTabTrame[CptData] = strdup(Datatxt) ; fonctionne très bien !
(Je ne connaissais pas ces fonctions dans string.h)
Merci encore à vous deux !