Problème de tableau en C
fangio
-
naholyr Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
naholyr Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je rencontre deux problèmes de programmation:
*le premier : comment fait-on à copier la valeur d'une variable de type char * dans une autre de type int ????
*la deuxième : je dispose d'un tableau à 2 dimensions dont chaque case contient 1 chaîne de caractères.
J'ai donc définis le tableau de la manière suivante:
char * tab[longueur][largeur];
J'initialise le tableau de la manière suivante:
for (j=0;j<largeur;j++){
for(i=0;i<longueur;i++)
tab[i][j]=" ? ";
}
Pourquoi la compilation ne marche-t-elle pas?????
Et peut-on avoir un pointeur sur un tableau à deux dimensions.
*le premier : comment fait-on à copier la valeur d'une variable de type char * dans une autre de type int ????
*la deuxième : je dispose d'un tableau à 2 dimensions dont chaque case contient 1 chaîne de caractères.
J'ai donc définis le tableau de la manière suivante:
char * tab[longueur][largeur];
J'initialise le tableau de la manière suivante:
for (j=0;j<largeur;j++){
for(i=0;i<longueur;i++)
tab[i][j]=" ? ";
}
Pourquoi la compilation ne marche-t-elle pas?????
Et peut-on avoir un pointeur sur un tableau à deux dimensions.
A voir également:
- Problème de tableau en C
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - 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.
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.