Convert char** en int sous c
Bonjour a tous,
Je développe une petite application en c pour appareil de lecture de code barre dont je récupère les infos.
J'avais besoin d'une fonction split comme en c#, je me suçis donc servis de ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Retour tableau des chaines recupérer. Terminé par NULL.
// chaine : chaine à splitter
// delim : delimiteur qui sert à la decoupe
// vide : 0 : on n'accepte pas les chaines vides
// 1 : on accepte les chaines vides
char** split(char* chaine,const char* delim,int vide){
char** tab=NULL; //tableau de chaine, tableau resultat
char *ptr; //pointeur sur une partie de
int sizeStr; //taille de la chaine à recupérer
int sizeTab=0; //taille du tableau de chaine
char* largestring; //chaine à traiter
int sizeDelim=strlen(delim); //taille du delimiteur
largestring = chaine; //comme ca on ne modifie pas le pointeur d'origine
//(faut ke je verifie si c bien nécessaire)
while( (ptr=strstr(largestring, delim))!=NULL ){
sizeStr=ptr-largestring;
//si la chaine trouvé n'est pas vide ou si on accepte les chaine vide
if(vide==1 || sizeStr!=0){
//on alloue une case en plus au tableau de chaines
sizeTab++;
tab= (char**) realloc(tab,sizeof(char*)*sizeTab);
//on alloue la chaine du tableau
tab[sizeTab-1]=(char*) malloc( sizeof(char)*(sizeStr+1) );
strncpy(tab[sizeTab-1],largestring,sizeStr);
tab[sizeTab-1][sizeStr]='\0';
}
//on decale le pointeur largestring pour continuer la boucle apres le premier elément traiter
ptr=ptr+sizeDelim;
largestring=ptr;
}
//si la chaine n'est pas vide, on recupere le dernier "morceau"
if(strlen(largestring)!=0){
sizeStr=strlen(largestring);
sizeTab++;
tab= (char**) realloc(tab,sizeof(char*)*sizeTab);
tab[sizeTab-1]=(char*) malloc( sizeof(char)*(sizeStr+1) );
strncpy(tab[sizeTab-1],largestring,sizeStr);
tab[sizeTab-1][sizeStr]='\0';
}
else if(vide==1){ //si on fini sur un delimiteur et si on accepte les mots vides,on ajoute un mot vide
sizeTab++;
tab= (char**) realloc(tab,sizeof(char*)*sizeTab);
tab[sizeTab-1]=(char*) malloc( sizeof(char)*1 );
tab[sizeTab-1][0]='\0';
}
//on ajoute une case à null pour finir le tableau
sizeTab++;
tab= (char**) realloc(tab,sizeof(char*)*sizeTab);
tab[sizeTab-1]=NULL;
return tab;
}
int main(){
int i;
int ret;
char* str="foo|bar||baz|bar|";
char** tab;
printf("Chaine initiale : %s \n",str);
tab=split(str,"|",0);
//affichage du resultat
for(i=0;tab[i]!=NULL;i++) {
printf("%d : %s\n",i,tab[i]);
//au passge je désalloue les chaines
free(tab[i]);
}
free(tab);
printf("\n");
tab=split(str,"|",1);
//affichage du resultat
for(i=0;tab[i]!=NULL;i++) {
printf("%d : %s\n",i,tab[i]);
//au passge je désalloue les chaines
free(tab[i]);
}
free(tab);
system("pause");
} |
Problème a la fin pour ma condition, je dois comparer un int mais la fonction me renvoi un char** !
Comment faire la conversion?
Merci
RESOLU : Convert char** en int sous c Modifier le message
Merci pour ta reponse pour votre attention, bon je vous explique ce que je souhaite faire.
Avec un bippeur de code barre, j'enregistre le matricule et l'heure de passage du personnel dans un fichier .csv sous la forme M750935;03/08/2010 10:22:25.
Mon problème est le suivant, j'arrive correctement a récupérer les lignes du fichiers .csv:
while( fgets(buffer,sizeof(buffer),csv) )
{
sscanf(buffer, "%[^;],%s", val1,val2);
....
}
J'ai donc le matricule dans ma variable val1, par contre la variable val2 reste vide, bizarre !
Ce que je souhaiterais c'est réucpérer l'heure, juste le 10 heure de cette chaine M750935;03/08/2010 10:22:25 qui est toujours de la meme forme!
Dans la mesure ou la chaine fait toujours la meme longueur, n'y a t'il pas moyen de récupérer le 13eme et 14eme caractère de la chaine et de le convertir en int que je puisse le comparer ?
Je galère, dur, dur le passage du c# au c. Cela fait un sacré bon dans l'histoire!
Merci de votre aide