Chaine de caracteres en c
Résolu
bckflow
Messages postés
444
Date d'inscription
Statut
Membre
Dernière intervention
-
bckflow Messages postés 444 Date d'inscription Statut Membre Dernière intervention -
bckflow Messages postés 444 Date d'inscription Statut Membre Dernière intervention -
salut a tous!
Voila, avant de vous exposer mon problème je tiens a dire que je ne cherche pas des réponses toutes faites mais des suggestions ou des pistes pour résoudre ce problème:
Je dois transformer une chaine de caractère char* en char**, merci pour toutes vos idées et votre aide :)
Voila, avant de vous exposer mon problème je tiens a dire que je ne cherche pas des réponses toutes faites mais des suggestions ou des pistes pour résoudre ce problème:
Je dois transformer une chaine de caractère char* en char**, merci pour toutes vos idées et votre aide :)
A voir également:
- Chaine de caracteres en c
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Chaine radio - Télécharger - Médias et Actualité
4 réponses
un char* est un pointeur sur un char, c'est-à-dire un pointeur sur un caractère.
Ce n'est pas tout fait une chaine mais presque.
En C une chaine c'est une suite de caractères en mémoire (comme un tableau !). La langage précise que cette suite doit se terminer par le caractère "vide", 0 en ASCII, c-à-d '\0' en C (ce qui est la même chose que la valeur numérique entière 0).
En fait, lorsque tu crées une chaine du genre : char phrase[50] = "Salut!", le tableau phrase est rempli de char comme suit :
'S' 'a' 'l' 'u' 't' '!' '\0'
note qu'il y a encore plein de cases dans le tableau qui contiennent n'importe quoi, on s'en fiche puisque le C ne lira pas la chaine après le '\0' (par exemple si tu fais un truc du genre printf(phrase) )
En fait, en C, le nom du tableau (phrase) est en fait justement un pointeur (constant si je ne me trompe pas) vers le premier élément du tableau ! phrase est pour le C de type const char * (et chaque phrase[0], phrase[1] signifie que tu prends le pointeur, tu le décales si besoin de ce qui est entre crochet, et tu le déréférence avec un *, et tu obtiens ton char.
phrase[5] est un peu comme faire (phrase+5*sizeof(char))* (toujours si je ne me trompe pas...)
Ce n'est pas tout fait une chaine mais presque.
En C une chaine c'est une suite de caractères en mémoire (comme un tableau !). La langage précise que cette suite doit se terminer par le caractère "vide", 0 en ASCII, c-à-d '\0' en C (ce qui est la même chose que la valeur numérique entière 0).
En fait, lorsque tu crées une chaine du genre : char phrase[50] = "Salut!", le tableau phrase est rempli de char comme suit :
'S' 'a' 'l' 'u' 't' '!' '\0'
note qu'il y a encore plein de cases dans le tableau qui contiennent n'importe quoi, on s'en fiche puisque le C ne lira pas la chaine après le '\0' (par exemple si tu fais un truc du genre printf(phrase) )
En fait, en C, le nom du tableau (phrase) est en fait justement un pointeur (constant si je ne me trompe pas) vers le premier élément du tableau ! phrase est pour le C de type const char * (et chaque phrase[0], phrase[1] signifie que tu prends le pointeur, tu le décales si besoin de ce qui est entre crochet, et tu le déréférence avec un *, et tu obtiens ton char.
phrase[5] est un peu comme faire (phrase+5*sizeof(char))* (toujours si je ne me trompe pas...)
Merci, j ai du mal m exprimer, en fait j ai une chaine de caractere dans un tableau a une dimension et je souhaiterai decomposer la chaine pour l inclure dans un tableau a deux dimension (type char **str)
en clair j ai un fichier que j ouvre avec une fonction cat et je recupere ensuite son contenu pour le lire et le modifier (j ai des "." des " " et des "o" dans ma chaine et je doit trouver le plus grand carre dans les lignes entre les "o"
par exemple:
...o.......o.
....o......o.
.o........o..
Mon carre le plus grand fait 5 sur 5.)
par exemple:
...o.......o.
....o......o.
.o........o..
Mon carre le plus grand fait 5 sur 5.)
Non pas exactement, phrase est un vrai tableau. La preuve est que sizeof tableau renverra 50. L'histoire du pointeur constant, c'est lorsque tu l'envoies en argument d'une fonction puisqu'en C, il n'est pas possible d'envoyer de tableau à proprement parlé en argument.
Cdlt
Je suis d'accord qu'on ne peut envoyer le tableau en tant que tableau comme argument dans une fonction mais si le besoin s'en fait sentir on peut transmettre 'phrase' comme s'il s'agissait d'un pointeur; constant ou pas, en fait, cela n'a pas d'importance puisque la fonction ne pourra pas modifier le pointeur.
Par contre le fait de considérer 'phrase' comme pointeur constant est important car cela signifie qu'on ne pourra pas modifier l'adresse sur lequel il pointe, ce n'est pas une 'lvalue' modifiable; si cela était possible , en fait ce serait comme si, après avoir défini un 'int i', on pourrait faire pointer 'i' sur une autre case mémoire, ce qui n'a aucun sens.
Ai-je commis une erreur d'interprétation ?
Bonne soirée.
et voici un exemple pour résumer ce que le contributeur avant précisait :
Encore heureux ^^. Ce que j'ai dit c'était juste pour insister sur la différence entre un char* et un char[]. Le compilateur convertira automatiquement le tableau en pointeur sur le premier élément en argument d'une fonction (et même de manière plus générale dans tout expression sauf cas particulier (sizeof, ...).
Par contre le fait de considérer 'phrase' comme pointeur constant est important car cela
Je vois ce que tu veux dire, mais ce n'est pas exactement ça. En fait, le tableau est une Rvalue de type pointeur puisque l'adresse ne peut évidement pas être changée. C'est pour cette raison qu'il est d'usage de mettre char *const dans le prototype d'une fonction prenant un "tableau" en argument.
(par contre l'auteur du sujet doit trouver qu'on s'écarte un peu :D)