Problème de tableau en C
Fermé
fangio
-
23 déc. 2001 à 11:15
naholyr Messages postés 28 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 11 septembre 2006 - 23 déc. 2001 à 22:24
naholyr Messages postés 28 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 11 septembre 2006 - 23 déc. 2001 à 22:24
A voir également:
- Problème de tableau en C
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Tableau de raccourcis clavier - Guide
3 réponses
. exemple:
char *ptr_char;
int var_entier;
// *ptr_char = ...;
var_entier = *ptr_char;
. essaie plutot ceci:
typedef char* string;
string tableau[longueur][largeur];
for (i=0; i<longueur; i++) {
for (j=0; j<largeur; j++) {
strcpy(tab[i][j], " ? ");
// ou bien strcpy (" ? ", tab[i][j]); je ne sais plus trop
}
}
en fait je vois deux causes possibles:
> soit le compilo croit que tab est un pointeur vers un tableau de char, et alors il n'aime pas ce que tu fais.
Ce probleme (cela dit je doute fortement que ce soit ca) est corrigé par la creation d'un type string, qui evite l'ambiguité en supprimant l'étoile ;-)
> soit il n'aime pas l'affectation de chaine (je suis quasi certain que c'est ca le probleme). En effet les chaines ne sont pas des tableaux comme dans les autres langages (les tableaux non plus d'ailleurs) mais une liste chainée. l'affectation ne peut donc se faire de la facon habituelle et il existe une fonction pour ca: strcpy.
je ne me souviens plus de son profil:
strcpy (char* source, char* destination)
ou bien
strcpy (char* destination, char* source)
voila.
char *ptr_char;
int var_entier;
// *ptr_char = ...;
var_entier = *ptr_char;
. essaie plutot ceci:
typedef char* string;
string tableau[longueur][largeur];
for (i=0; i<longueur; i++) {
for (j=0; j<largeur; j++) {
strcpy(tab[i][j], " ? ");
// ou bien strcpy (" ? ", tab[i][j]); je ne sais plus trop
}
}
en fait je vois deux causes possibles:
> soit le compilo croit que tab est un pointeur vers un tableau de char, et alors il n'aime pas ce que tu fais.
Ce probleme (cela dit je doute fortement que ce soit ca) est corrigé par la creation d'un type string, qui evite l'ambiguité en supprimant l'étoile ;-)
> soit il n'aime pas l'affectation de chaine (je suis quasi certain que c'est ca le probleme). En effet les chaines ne sont pas des tableaux comme dans les autres langages (les tableaux non plus d'ailleurs) mais une liste chainée. l'affectation ne peut donc se faire de la facon habituelle et il existe une fonction pour ca: strcpy.
je ne me souviens plus de son profil:
strcpy (char* source, char* destination)
ou bien
strcpy (char* destination, char* source)
voila.
Marden
Messages postés
1072
Date d'inscription
dimanche 11 février 2001
Statut
Membre
Dernière intervention
29 janvier 2006
210
23 déc. 2001 à 15:58
23 déc. 2001 à 15:58
1) - par simple affectation
2) - utiliser un tableau d'entiers (pas de "*")
2) - utiliser un tableau d'entiers (pas de "*")
Marden
Messages postés
1072
Date d'inscription
dimanche 11 février 2001
Statut
Membre
Dernière intervention
29 janvier 2006
210
23 déc. 2001 à 16:39
23 déc. 2001 à 16:39
Autant pour moi et pour le 2). La solution proposée pourrait convenir pour le stockage de caractères.
char *tab[longueur][largeur];
for (i=0; i<longueur; i++) {
for (j=0; j<largeur; j++) {
strcpy(*tab[i][j], " ? ");
}
}
charge dans chaque élément du tableau, l'adresse de la constante "?" générée par le compilateur et suivie d'un "\0".
La notion de chaîne n'existe pas en C . La déclaration d'une chaîne doit être remplacée par celle d'un tableau de caractères, en prévoyant la place pour le "nul" marquant la fin de celle-ci. Il ne s'agit pas d'une liste chaînée (les caractères sont rangés à des adresses consécutives).
La fonction "strlen()" retourne la position du premier "nul" (exprimée en relatif : 0 = chaîne vide), qui peut être en deçà de la zone réservée, mais quelquefois au-delà, si la limite n'est pas contrôlée.
L'implémentation des fonctions de "string" peut varier d'une machine à l'autre et causer quelques déboires.
char *tab[longueur][largeur];
for (i=0; i<longueur; i++) {
for (j=0; j<largeur; j++) {
strcpy(*tab[i][j], " ? ");
}
}
charge dans chaque élément du tableau, l'adresse de la constante "?" générée par le compilateur et suivie d'un "\0".
La notion de chaîne n'existe pas en C . La déclaration d'une chaîne doit être remplacée par celle d'un tableau de caractères, en prévoyant la place pour le "nul" marquant la fin de celle-ci. Il ne s'agit pas d'une liste chaînée (les caractères sont rangés à des adresses consécutives).
La fonction "strlen()" retourne la position du premier "nul" (exprimée en relatif : 0 = chaîne vide), qui peut être en deçà de la zone réservée, mais quelquefois au-delà, si la limite n'est pas contrôlée.
L'implémentation des fonctions de "string" peut varier d'une machine à l'autre et causer quelques déboires.
naholyr
Messages postés
28
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
11 septembre 2006
23 déc. 2001 à 22:24
23 déc. 2001 à 22:24
autant pour moi pour les listes chainées, en effet il s'agit bien de tableaux.
=================
optimiser ?! commence donc par refléchir...
=================
optimiser ?! commence donc par refléchir...