0
votes

Passage d'une matrice d'une méthode dans le fichier 1 à une méthode du fichier 2 sans utiliser de paramètre supplémentaire dans une méthode

Je reçois tous les zéros dans global_array_of_file2.idea consiste à obtenir les valeurs mises à jour de File1.c

        ========================file1.c===========================  
    #include <stdio.h>
    #include <string.h>
    int global_array_of_file1[10];


    void func1(int a1,int b)
    {
      int array1_of_func1[10] = {0};
      int a;
       array1_of_func1[5] = 23;
       array1_of_func1[6] = 34;

    memcpy(global_array_of_file1,array1_of_func1,10*sizeof(int));
     for (a = 0; a < 9; a++)
     {
       printf("from func_1 : global_array = %d \n " , global_array_of_file1[a]);

     }
    }

    void init_pointer(int *tmp)
    {

      tmp = global_array_of_file1;

    }
    ~  


        ==========================file2.c======================
#include<stdio.h>
#include "file1.h"
int global_array_of_file2[10] = {0};
int main()
{
  int i;
  init_pointer(global_array_of_file2);

  func1(3,4);

  for(i = 0; i < 9 ; i++)
  {

  printf("global_array_of_file2 = %d \n" , global_array_of_file2[i]);
  }


return 0;


}

        ========================file1.h===========================  

            void init_pointer(int *tmp);
            void func1(int a,int b);


8 commentaires

Nulle part dans le code que vous avez donné, il y a un point sur lequel vous mettez à jour (ou même référence) global_array_of_file2 , à l'exception de l'appel à: init_global_array_of_file_2 (global_array_of_file2) et vous 't nous a montré le code de cette fonction. Alors, où attendez-vous que la mise à jour se produise?


Son intérieur: // continue à appeler Func1 () à intervalle régulier et obtenez les valeurs mises à jour de Array1_of_func1 que j'ai essayé de mettre à jour en transmettant un pointeur dans File1.c, puis mettant à jour ce pointeur. Mise à jour du corps Func2 ()


Pourquoi votre taille est-elle une fois 10 et l'autre fois 5?


Je répète mon point précédent! Montrez-nous du code sur lequel vous pense global_array_of_file2 est mis à jour - ou nous ne pouvons pas vraiment aider.


Les fonctions ont besoin de types de retour. C'est bizarre que vous ayez négligé d'inclure des types de retour, même si vous parlez d'appeler Func1 () pour obtenir des données.


Est-ce trop pour vous demander de montrer votre code réel ? Ce que vous avez ci-dessus, n'est-ce pas parce que cela ne compilerait jamais. Voyons un exemple qui compile réellement pour que nous puissions en parler dans des termes concrets.


Donnez-moi un peu de temps, je collerai bientôt. Je dois supprimer un code hérité.


mis à jour le code compilable.


3 Réponses :


-1
votes

Le memcpy est faux. Vous ne copiez que 10 octets.

Un intégrateur est généralement de 4 octets long (32 bits), vous ne copiez donc que des pièces de la matrice, à savoir les dix premiers octets, vous copiez ainsi uniquement l'INT avec index 0,1,2 et la moitié de 4.

Vous devez copier 10 * Tailleof (int)


1 commentaires

Oui, parce que ce code n'est pas un programme de travail. Mais cette membopie ne fait pas ce qu'il pense que cela le fait, donc je l'ai signalé.



0
votes

OK, je pense que cela peut être corrigé facilement en faisant ci-dessous:

déclarer extern int int global_array_of_file1 [10] dans File1.c

Définir int global_array_of_file1 [10] = {0}; dans File2.c

Je n'ai même pas besoin d'initialiser le pointeur de File2.c (pas besoin d'appeler init_pointer) et plus RAM sera aussi enregistré :)!


0 commentaires

1
votes

Il y a deux problèmes ici:

premier numéro est:

Le code pour init_pointer ne fait rien: xxx

comme la variable TMP est un Copie de la variable d'entrée (appelée valeur), il ne fait rien. Pour que cela fonctionne correctement, cela devrait être quelque chose comme ceci: xxx

Toutefois, car le global_array_of_file2 est déclaré comme une matrice, il s'agit en réalité d'un pointeur statique qui ne peut pas être changé. Impossible de modifier sa valeur à l'aide de l'énoncé comme ** TMP = global_array_of_file1.

Il est possible de le faire fonctionner, vous devez appeler memcpy dans la méthode du pointeur init: Comme ceci: xxx

Le deuxième problème est que le code à l'adresse principale, appelez d'abord l'init_pointer (qui ne fait rien), alors il appelle "Func1" qui initialise le tableau. L'ordre est le contraire. Premier appel à Func1 pour définir la matrice avec les valeurs appropriées, appelez la méthode init_array pour copier ces informations à Global Array 2. Donc, au lieu de xxx

il doit être xxx

C'est tout si vous voulez avoir une copie / strong> du global_array_file1 au fichier2.

Si vous le souhaitez, vous pouvez avoir le tableau même partagé entre fichiers , pour le faire:

au fichier1 .h déclarer le tableau comme externe: xxx

alors vous pouvez simplement l'utiliser à fichier2.c, qui incluent le fichier1.h


1 commentaires

Ouais, approche externe que j'ai beaucoup aimé!