begin process at 2012 05 28 22:53:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Conversion d'un char[] en char*puis stocké en char*[]


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

Conversion d'un char[] en char*puis stocké en char*[]

mardi 6 juillet 2010 à 16:38:38 | Conversion d'un char[] en char*puis stocké en char*[]

Saigonoseme



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);
}
}
mardi 6 juillet 2010 à 19:48:06 | Re : Conversion d'un char[] en char*puis stocké en char*[]

manudiclemente

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!

Lien vers les fonctions de chaines.
mercredi 7 juillet 2010 à 09:06:54 | Re : Conversion d'un char[] en char*puis stocké en char*[]

tpoinsot

Bonjour,

tu affectes toujours au tableau de pointeur la même adresse! à la fin ils contiennent tous l'adresse de Datatxt qui contient la dernière valeur.

fais plutôt :
Code C/C++ :
tAgTabTrame[CptData] = strdup(Datatxt) ; 
mercredi 7 juillet 2010 à 10:27:47 | Re : Conversion d'un char[] en char*puis stocké en char*[]

Saigonoseme




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 !

Philippe G


Cette discussion est classée dans : fichier, char, datatxt, cptdata, tagtabtrame


Répondre à ce message

Sujets en rapport avec ce message

Debutant : ecrire et lire un fichier txt [ par manu ] Bonjour a tous.Je debute, aussi desole.... :)Je cherche donc a ecrire dans un fichier txt, puis a lire ce fichier ligne a ligne, faire un split / expl ecriture fichier txt turboC++ [ par idk ] qqun connais une fonction, qui te place le cursor, (dans un fichier),CAD qui renvoie à la ligne suivante exemple char prenom="tom"char nom="bauq" Et d écriture dans un fichier txt [ par jimtruand ] bonjour,j'ai un fichier txt à traiter et à envoyer via ftp à un serveur. la partie ftp est ok.la partie fichier pt'problèmedans le fichier je dois mod Ecriture/lecture dans un fichier [ par SneakGuy ] Haaa... Merci, sa m'a aider... Enfin, j'ai encore plusieurs problemes...pour l'ecriture j'ai quelque chose qui ressemble a sa:char user[20];char pass[ ça concerne la lecture et l'ecriture sur un fichier et ... [ par wfish ] voila mon pb :j'ai fais un ptit prog de traitement de fichier. il sert à mettre certaines infos prises dans un fichier et les mettre dans un autre !!1 liste chainée et lecture d'un fichier txt [ par whiteknight ] Bonjour j'ai un probleme pour charger des données depuis un fichier texte, les données recupérées doivent etre stocké dans un liste chainée déclaré ai PROBLEME pour retourner un char* a partir d'un fichier [ par kobee12 ] Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang PROBLEME pour retourner un char* apres recuperation d'une chaine(sscanf) d'un fichier [ par kobee12 ] Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang Lecture dans un fichier ... CHaud !! [ par ilyatout ] Bonjour,VOilà g un gros problème, c'est idiot mais je n'y arrive pas.j'ai un fichier de la sorte :NOM : NICOLAS / MARTIN // 28je dois stocker NICOLAS Petite question ayant attrait à la gestion de fichier. [ par meteore ] Voila je suis en train de faire un petit logiciel pour le classement de mes cds.J'ai donc créer une fonction permettant d'ajouter un cd dans une boite


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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

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