Declarer un tableau de type variable en c

Bonjour,

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

merci.

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    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;
    }
    1. 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
      1. Modérateur
        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.
      2. je suis sous linux je compile par gcc -c ...
      3. Modérateur
        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.
      4. mais le probleme il accepte vect1[100]
    2. 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
      1. Contributeur
        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,
    3. 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
      
      1. merci de me repondre mais toujours sa marche pas
    4. je vous rappel que je developpe une application RPC
      merci
      1. Contributeur
        T'as essayé ce que je t'ai dit ?
      2. oui j'ai fait
        j'ai essayé un tableau de taille 100 sans probleme mais 700 il plante

        merci
      3. Contributeur
        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...
      4. je vais essayer de les envoyer par partis

        merci
      5. 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