Bonsoir,
Existe t'il une solution pour convertir une chaine char en un tableau?
Bonsoir,
Existe t'il une solution pour convertir une chaine char en un tableau?
Ça dépend de ce que tu veux faire.
Si tu veux déposer chaque caractère dans sa propre « case », alors ta chaîne est déjà un tableau. Tu peux dès maintenant indexer tes caractères avec chaine[0], chaine[1], chaine[2], etc.
Au fait ce n'est même un une chaine char que j'ai, mais une const char:
exemple:
const char *argv;
argv = "toto titi";
le but c'est d'avoir:
chaine[0] = toto et chaine[1]=titi
Salut
Le concept "chaine" n'existe pas en C. Il est donc simulé par l'utilisation d'un tableau de char où chaque case du tableau contient un caractère de la chaine.
Et pour que le programmeur sache où s'arrête la chaine, le tableau contient une case supplémentaire contenant le caractère '\0'.
Ensuite, suffit de créer des fonctions permettant de manipuler (copier, afficher, compter) les chaines ; ces fonctions se basant toutes sur le caractère '\0'. Et, comble du bonheur, ces fonctions ont déjà été écrites et sont à ta disposition.
A partir de là, puisqu'une chaine c'est déjà un tableau, ta question n'a plus trop de sens...
J'avais pas vu ton édit quand j'ai posté. Donc déjà ça fait une sacrée différence avec ta question initiale...
Tu peux le faire en utilisant strtok_r()
Bon j'ai tapé cet exemple vite fait sans le tester mais ça devrait être bon. Et on peut même le faire en une ligne mais ça devient alors assez imbitable...
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 char *argv="toto titi"; char *word, *mem; char* chaine[2]; size_t i; for (word=strtok_r(argv, " ", &mem), i=0; word != NULL; word=strtok_r(NULL, " ", &mem), i++) { chaine[i]=word; }
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Si j'ai bien compris, il te faut un tableau de chaines (char**).
Tu en déclares un et tu affecte un char* à chacune de ses cases.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Ok, je vais tester ca demain et je vous tiens au courant.
Merci bien
quand je compile le code j'ai des erreurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void preferences_arrt (int argc, char **argv) { int i; int quote; entries_count = 0; const char *param; /*int argc;*/ char *word, *mem; char* chaine[2]; int i; param = preferences_get ("Parameters"); argc = wpreferencecount (); for (word=strtok_r(param, " ", &mem), i=0; word != NULL; word=strtok_r(NULL, " ", &mem), i++) { chaine[i]=word; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 preferences.c(101) : error C2143: syntax error : missing ';' before 'const' preferences.c(103) : error C2143: syntax error : missing ';' before 'type' preferences.c(104) : error C2143: syntax error : missing ';' before 'type' preferences.c(105) : error C2143: syntax error : missing ';' before 'type' preferences.c(107) : error C2065: 'param' : undeclared identifier preferences.c(107) : warnin g C4047: '=' : 'int' differs in levels of indirection from 'const char *' preferences.c(111) : error C2065: 'word' : undeclared identifier preferences.c(111) : warnin g C4013: 'strtok_r' undefined; assuming extern returning int preferences.c(111) : error C2065: 'mem' : undeclared identifier preferences.c(111) : warnin g C4047: '!=' : 'int' differs in levels of indirection from 'void *' preferences.c(113) : error C2065: 'chaine' : undeclared identifier preferences.c(113) : error C2109: subscript requires array or pointer type Build process ended with: Compilation error(s) using win32-vc8
preferen
ces.obj : error LNK2019: unresolved external symbol _strtok_r referenced in func
tion preferences_arrt
entries_count n'a pas de type. Pour moi c'est probablement un int, mais le compilateur ne le sait pas, lui.
Edit : include <string.h> manque aussi.
entries_count est declaré en globale ce n'est pas sur sa qu'il ya l'erreur...
Après quelques modification j'ai moins d'erreurs:
preferences.c(110) : warnin
g C4013: 'strtok_r' undefined; assuming extern returning int
preferences.c(110) : warnin
g C4047: '=' : 'char *' differs in levels of indirection from 'int'
preferences.c(110) : warnin
g C4047: '=' : 'char *' differs in levels of indirection from 'int'
Linking toto_win32_vc8.exe...
preferen
ces.obj : error LNK2019: unresolved external symbol _strtok_r referenced in func
tion _wpreferencesrrt
Ses erreurs se porte sur la ligne de code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part for (word=strtok_r(param, " ", &mem), i=0; word != NULL; word=strtok_r(NULL, " ", &mem), i++)
Le #include <string.h> est ajouté
Il ne connait pas la fonction 'strtok_r' .
C'est une fonction non standard et peut être que ton compilateur n'en dispose pas. Vérifie dans la documentation qu'elle existe et dans ce cas quel include il faut faire (apparemment ce n'est pas <string.h>) et quelle bibliothèque utiliser pour l'édition de liens.
J'ai regardé sur le net et j'ai vu quelle dans la bilbliothèque qu'elle est utilisé,
Sinon tu fais référence à quelle documentation?
Sinon ya til un autre moyen pour contourner l'utilisation de strtok_r?
Celle de ton compilateurSinon tu fais référence à quelle documentation?
Dans le code que tu présentes, strtok(), qui est standard, devrait faire l'affaire.Sinon ya til un autre moyen pour contourner l'utilisation de strtok_r?
C'est quoi la différence entre strtok() et strtok_r?
en utilisant le code comme suit pour récupérer chaque mot dans une "case" j'ai une "access violation writing location ...." qaand je rentre dans la fonction strtok.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 const char *param; char *word; int i; char* chaine[2]; param = "une chaine"; for (word=strtok(param, " "), i=0; word != NULL; word=strtok(NULL, " "), i++) { chaine[i]=word; }
Au fait, c'est parce qu'il ne faut pas utiliser une constante mais un char str[] par exemple.
Mais dans ce cas comment faire lorsque l'on a a disposition qu'un const *char.
Ya til moyen de le convertir en string?
Dans ton cas, il faut que la chaine soit modifiable puique strtok() va vouloir remplacer le séparateur par 0. Par exemple :
param est alors un tableau modifiable initialisé par la chaine "une chaine"
Code : Sélectionner tout - Visualiser dans une fenêtre à part char param[] = "une chaine";
Dans le code :
param est l'adresse de la chaine non modifiable "une chaine" stockée quelque part ailleurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 const char *param; ... param = "une chaine";
Merci bien, j'ai compris le fonctionnement
Partager