Declarer un tableau de type variable en c

yuri648 Messages postés 785 Statut Membre -  
yuri648 Messages postés 785 Statut Membre -
Bonjour,

comme le titre dit comment declarer un tableau de type variable en c?

merci.

5 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Tu peux créer un tableau de pointeur, et utiliser n'importe quel pointeur dedans...

    #include "stdio.h"
    
    int main()
    {
    	void* tab[10]; // tableau de pointeurs
    
    	int i=3;
    	char texte[10]="bonjour";
    
    	tab[0]=&i;
    	tab[1]=texte;
    
    	printf("%d %s\n", * (int*) tab[0], (char*) tab[1]); // 3 bonjour
    
    	return 0;
    }
    0
  2. yuri648 Messages postés 785 Statut Membre 7
     
    merci de me repondre
    je develope un programme rpc et je ne peux pas dfinir un tableau de 700 case

    struct data {
    int m;
    double vect1[700];
    double vect2[700] ;
    int lon;
    };

    typedef struct data data;

    et quand j'execute le programme client j'aurai cet erreur

    call failed: RPC: Can't encode arguments
    merci
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Avec Visual Studio, il n'y a pas de problème pour ce code. Néanmoins tu devrais éviter d'appeler de la même manière ta structure data et ton type data, ça peut être ambiguë pour ton compilateur.
      0
    2. yuri648 Messages postés 785 Statut Membre 7
       
      je suis sous linux je compile par gcc -c ...
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      gcc ou Visual Studio ne devrait rien changer, le code est bon, excepté cette double dénomination de data qui pourrait être pris pour une erreur.
      0
    4. yuri648 Messages postés 785 Statut Membre 7
       
      mais le probleme il accepte vect1[100]
      0
  3. yuri648 Messages postés 785 Statut Membre 7
     
    dans un tuto je l'ai lu qu'il faut le decalrer comme ceci
    int vect1<> dans ma structure

    donc moi j'essaye d'y acceder avec data->vect1[1]

    mais jaurai cet erreur

    prod_client.c:18: error: subscripted value is neither array nor pointer
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Juste comme ça.
      Pourquoi tu cherches une erreur dans ton code alors qu'il n'y en a pas ?
      Tu dis que tu as le message : "call failed: RPC: Can't encode arguments"
      C'est la preuve que ton compilateur marche puisque t'obtiens cette erreur à l'exécution non ? Ne serait-ce pas dû au fait que tes tableaux sont trop grands pour être envoyés en RPC ? Essais d'envoyer des données beaucoup plus petites pour tester.
      Cdlt,
      0
  4. alphon5o
     
    pour faire ça tu corrige ton typedef; c pa correct
    typedef struct data *data;

    la tu porra faire :
    data d = .......
    d->le_champ_de_ta_structure_au_quel_tu_veux_acceder
    
    0
    1. yuri648 Messages postés 785 Statut Membre 7
       
      merci de me repondre mais toujours sa marche pas
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yuri648 Messages postés 785 Statut Membre 7
     
    je vous rappel que je developpe une application RPC
    merci
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      T'as essayé ce que je t'ai dit ?
      0
    2. yuri648 Messages postés 785 Statut Membre 7
       
      oui j'ai fait
      j'ai essayé un tableau de taille 100 sans probleme mais 700 il plante

      merci
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Beh voilà, t'as la solution à ton problème.
      Preuve est que ton code marche très bien et que le problème vient du protocole RPC qui t'impose l'envoi de petits paquets.
      A toi de faire des découpes...
      0
    4. yuri648 Messages postés 785 Statut Membre 7
       
      je vais essayer de les envoyer par partis

      merci
      0
    5. yuri648 Messages postés 785 Statut Membre 7
       
      j'ai reglé le probleme en connectant par tcp au lieu de udp

      clnt = clnt_create (host, PROD, VERSION_UN, "tcp");
      j'ai pu transferer transferer un tableau jusqu'a 400000
      0