Comment faire des tableaux de chaines de caractères ?

cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022 - 16 juil. 2002 à 00:45
jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 - 17 juil. 2002 à 11:38
Je veux faire des tableaux de chaines de caractères I want to make arrays of strings, mais en utilisant seulement le type de base, char.

J'ai essayé ceci:
char **MyString = new char *[100];
Ca ne marche pas.

25 réponses

mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 1
16 juil. 2002 à 02:02
#include
#include <stdlib.h>

void main()
{
char **tableaux = new char*;
tableaux[0] = "Yeah";

cout
<< tableaux[0] << endl;

system("PAUSE");
}

voila voila j'espère que ça t'as aidé ! @+
0
mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 1
16 juil. 2002 à 02:04
Euh j'ai oublié le delete *tableaux; à la fin désolé ! @+
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 02:10
Tiens, c'était si simple que ça ? Mais est-il possible de limiter le nombre d'éléments du tableau ? Comme pour un simple tableau d'entiers par exemple ?

Enfin, déjà, merci beaucoup, ca marche super!
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 02:24
Oops... Ca marche pas si bien en fait... Voilà plus de détails:

//-------------------------------------------------------
FILE *Fichier;
char **MesChaines = new char *;

Fichier = fopen("FILE.BIN","rb");
fread(&MesChaines[0], sizeof(MesChaines[0]), 1, Fichier);

printf( MesChaines[0] );

delete MesChaines;
//-------------------------------------------------------

Ca ne marche pas... J'obtiens une erreur lors du fread...
Ah et désolé, les fonctions d'entrées/sorties du C...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 1
16 juil. 2002 à 06:48
Désolé mais le coe que je t'ai donné c'est du C++ donc peut être que ça déonne un peu avec fread et compagnie.. essaye un malloc à la place de new.
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 11:48
J'utilises le language C++, mais pour les entrées/sorties, c'est du C... Et C + C++ = C++ (heu...)

Heu, c'est comment déjà en C++ les entrées / sorties ? (au fait, c'est un programme sous Windows...)
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
16 juil. 2002 à 13:25
char **tableaux = new char*;

-> c'est faux, puisque d'un côté on n'a char** et de l'autre char*, ca ne compile même pas.

tableaux[0] = "Yeah";

-> Ben pareil, en C pour affecter une chaine de caractères on utilise strcpy() ; ce ne sont pas des objets. Autre erreur classique, comparer des char* avec ==.
0
cs_VinceR Messages postés 47 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 27 avril 2005
16 juil. 2002 à 17:49
Entrée/sortie pourquoi faire ?

VinceR
0
jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
16 juil. 2002 à 20:35
salut,

donc toi tu fais

char **MyString = new char*[100];

pour l'instant c'est bon, tu alloue de la memoire pour un tableau de 100 char*. Bien mais apres il faut alloue la memoire pour chaque ligne.

A faire comme ceci

//Taille d'une chaine de caractere
#define MAX_STRING 256

char **MyString;
//Allocation memoire pour un tableau de 100 lignes
MyString = new (char*[100]);

//Allocation memoire pour la ligne MyString[0]
MyString[0] = new char[MAX_STRING];
...

et voila.
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 22:59
Entrées / Sorties sur un fichier, évidement !
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 23:04
Si ça compile.

char **tableaux = new char*;

C'est un pointeur de pointeur de caractère. Ca compile, mais le programme plante en tantant d'y accéder.
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 23:05
-------------------------------
Réponse au message :
-------------------------------

salut,

donc toi tu fais

char **MyString = new char*[100];

pour l'instant c'est bon, tu alloue de la memoire pour un tableau de 100 char*. Bien mais apres il faut alloue la memoire pour chaque ligne.

A faire comme ceci

//Taille d'une chaine de caractere
#define MAX_STRING 256

char **MyString;
//Allocation memoire pour un tableau de 100 lignes
MyString = new (char*[100]);

//Allocation memoire pour la ligne MyString[0]
MyString[0] = new char[MAX_STRING];
...

et voila.

-------------------------------
Réponse au message :
-------------------------------

Je veux faire des tableaux de chaines de caractères I want to make arrays of strings, mais en utilisant seulement le type de base, char.

J'ai essayé ceci:
char **MyString = new char *[100];
Ca ne marche pas.
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 23:10
Cool! Mais... Si je veux que les chaines de caractères de mon tableau soient de longueur indéfinie ?

Pour une chaine normale:
char *MyString = new Char;

Là, elle est bien de longueur indéfinie, non ?
0
jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
16 juil. 2002 à 23:18
Non, la tu reserve un espace memoire pour un char et pas plus. Tous ce qui est en plus du premier caractère sera soit :
- pas pris en compte et provoquera une erreur
- perdu très rapidement

Mais dans tous les cas tu peut etre sur que ca va te planter a un moment ou a un autre.
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 23:23
Ben alors... C'est comment les chaines de caractères de longueur indéfinies ?
0
jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
16 juil. 2002 à 23:35
ben avec le type de base tu peux pas.
Bien sur il y a la STL avec std::string, qui s'occupe de tout l'aspect allocation, qui te permet d'avoir des chaines de caractères de taille non définie a l'avance.
0
cs_VinceR Messages postés 47 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 27 avril 2005
16 juil. 2002 à 23:50
Ben non c'est pas si évident que ça... ça peut etre des entrées/sorties vers un port parralléle ou vers l'ecran...

VinceR
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
16 juil. 2002 à 23:58
Ah donc, dans ce cas, comment les utiliser pour faire un tableau de chaines ed caractères ?
0
cs_ProGamer Messages postés 44 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 1 février 2022
17 juil. 2002 à 00:06
Ouais, mais on étais en train de parler de fichier juste avant...
0
jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
17 juil. 2002 à 00:13
Bon alors pour ce que j'en sais tu fais :

#include <vector>

using namespace std;

//tu declares ton tableau de 100 elements

vector <string> MyString(100);

et voila. Pour le reste je te laisse allez voir ce site :

http://www.xraylith.wisc.edu/~khan/software/stl/STL.newbie.html
0
Rejoignez-nous