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
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.
A voir également:

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.
0
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
1) - par simple affectation
2) - utiliser un tableau d'entiers (pas de "*")
0
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
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.
0
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
autant pour moi pour les listes chainées, en effet il s'agit bien de tableaux.

=================
optimiser ?! commence donc par refléchir...
0