teufeur2lest a écrit :
Héhé, ben finalement je m'en suis sorti tout seul !
apparemment, lorqu'on passe un tableau à 2dimensions en paramètre d'une fonction, on est obligé de dire qu'elle est la taille de la deuxième dimension dans le prototype de la fonction...
ainsi en rajoutant void initTab(char* tab[][2]) ca passe à la compil...
|
C'est normal - Il faut que le compilo connaisse la taille de la première dimension pour qu'il puisse calculer "tab[x][y]". Faut pas oublier qu'en mémoire tu n'as qu'une seule dimension et tout se fait par calcul. Donc si tu veux atteindre l'élément "tab[x][y]", le compilo calculera que c'est la case "c[x * taille dimension1 + y]"
D'une façon plus générale, si tu as un tableau de dimension "n", tu es obligé de dire à ta fonction la taille des "n - 1" premières...
teufeur2lest a écrit :
#include <stdio.h>
#include <string.h>
void initTab(char* tab[][])
{
tab[0][0] = "yooo";
tab[0][1]="yo";
}
int main()
{
char* tab[5][2];
int i;
for(i = 0; i < NB; i++)
{
tab[i][0] = malloc(5*sizeof(char));
tab[i][1] = malloc(3*sizeof(char));
}
initTab(tab);
} |
|
Bon, t'as l'air débutant. Quand tu postes un code, rajoute les balises "fixed" ou "cpp" devant le code, cela permet de le formater dans un affichage plus lisible. Il te suffit de mettre "[ F I X E D ]" (sans les espaces) devant le code et "[ / F I X E D ]" après le code (ou "cpp" qui te donnera un affichage syntaxiquement coloré)
Maintenant, je vois pas trop ce que tu cherches à faire. Comme le dit DarWog, quand tu manipules une chaîne comme "yooo", tu ne manipules que l'adresse de la zone mémoire où elle commence. Donc si tu écris
char toto[5];
toto="yooo"; |
Tu n'auras pas "toto[0]='y', toto[1]='o', toto[2]='o', etc..." comme tu voudrais mais tu auras "toto[0]=adresse de la zone mémoire statique où a été rangé la chaîne "yooo", et toto[1], toto[2], toto[3] et toto[4]=n'importe quoi". D'ailleurs le compilo refusera car il ne comprendras pas que tu cherches à mettre l'adresse d'un char (donc un "char étoile" ) dans un "char"...
En fait, il faut bien que tu saches qu'en C, le type "chaine de caractère" n'existe pas donc tu ne peux pas le manipuler comme tu le ferais avec des int ou des char. Tout ce que tu peux manipuler, c'est l'adresse de la zone mémoire où se trouve le premier caractère de cette chaîne. Et à partir de cette adresse, tu peux passer à l'adresse suivante où se trouve le second caractère puis la suivante où se trouve le 3° etc jusqu'à ce que t'aies traité toute la chaîne. Et pour t'arrêter, il te suffit de chercher le caractère de valeur '\0' qui est là pour ça.
Ex: si t'écris
Si tu écris
Ben malgré la logique apparente, ce test sera faux parce que tu ne compares que 2 adresses différentes, chacune de ces 2 adresses ayant peut-être le même contenu mais n'étant pas à la même place...
Message édité par Sve@r le 11-10-2006 à 06:44:21
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.