Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
827 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [RESOLU] tab multidimensionel en paramètre d'une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] tab multidimensionel en paramètre d'une fonction

n°1454587
teufeur2le​st
Posté le 09-10-2006 à 20:27:02  profilanswer
 

Bonjour !!
 
Je souhaite passer l'adresse d'un tableau multidimensionnel en paramètre d'une fonction pour que celle-ci puisse le modifier...
Mais voilà ça ne passe pas à la compilation : "invalid use of array with unspecified bounds"
 
Voici le script qui pose pb :  
 
 
#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);
}
 
D'après la compilation l'erreur provient des 2 lignes de la fonction initTab..., le reste passe sans problème...
 
Merci pour votre aide !!

Message cité 1 fois
Message édité par teufeur2lest le 09-10-2006 à 22:10:40
mood
Publicité
Posté le 09-10-2006 à 20:27:02  profilanswer
 

n°1454611
teufeur2le​st
Posté le 09-10-2006 à 22:10:14  profilanswer
 

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...
 
merci quand-même!

n°1455159
DarWog
Posté le 11-10-2006 à 01:15:22  profilanswer
 

aahhhhhh!!!!!! c'est quoi ce truc???
 
heu normalement quand tu passes un tableau à une fonction, tu passes juste func(char*** tab,int n, int p) : l'adresse de ton tableau et ses dimensions si elles sont variables (mais ici tu t'en fous).
(à la limite tu dois pouvoir passer : "char* tab[0][0]" qui devrait revenir au même mais c'est pas très joli)
 
et autre chose, on n'a pas le droit de faire : tab[0][0]="truc"
l'affectation d'une chaine ne se fait que lors de la déclaration, par exemple : char *chaine="machaine"
mais jamais :
   char *chaine;
   chaine="machaine"
ca ne marche pas (réfléchis aux types des objets)
utiliser la fonction strcpy(ch1,ch2) me semble pour copier une chaine
 
voila

n°1455169
Sve@r
Posté le 11-10-2006 à 06:24:01  profilanswer
 

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

if ("hello" == "hello" )


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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [RESOLU] tab multidimensionel en paramètre d'une fonction

 

Sujets relatifs
[.NET] StreamReader, position dans un fichier, fonction peek et seek[Résolu] [C#] Création puis ouverture d'un fichier => problème
Notice: Undefined offset d'une fonction dans une classe[Résolu] Enregistrement d'animation
help sur une fonction[RESOLU] Menu déroulant en HTML
[Résolu] MMORPG en javacontrol d'edition ...
aide OpenOffice.org utiliser la fonction "RECHERCHEV"[RESOLU] Header() en php
Plus de sujets relatifs à : [RESOLU] tab multidimensionel en paramètre d'une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR