J'ai un tableau de structures appelé node
s. Chaque noeud contient un champ d'un pointeur vide.L'impression (Char *) (Void *) fonctionne dans le programme principal mais ne fonctionne pas
Dans une fonction, je prends le nœud spécifique et affecte le pointeur vide à une chaîne, cette chaîne contenant le résultat d'une décimale qui a été convertie en binaire. Le problème est que l'accès et l'impression de ce pointeur de void cast en char * fonctionne correctement dans la fonction pour assigner le void * à un nouveau char * AND imprime bien en revenant à la fonction principale. Cependant, il ne s'imprime pas correctement lorsque j'essaie de l'imprimer dans une fonction séparée qui prend le nœud [] et l'index du tableau en arguments.
Pour aider à éclairer la confusion c'est la version simplifiée de mon programme:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define listSize 100
typedef struct Node
{
union{
void *dataPtr;
int countr;
}dataItem;
int link;
}node;
void loadData(node*);
void printFunc(node[], int);
void main()
{
struct Node Stack[listSize];
loadData(&Stack[0]);
//This prints fine
char * temp;
temp = (char*)(Stack[0].dataItem.dataPtr);
printf("\nMain(): Stack[empty].dataItem.dataPtr = %s\n", temp);
printFunc(Stack, 0);
}
void loadData(node* link){
char string[220];
int n, c, k, i;
printf("Enter an integer: ");
scanf("%d", &n);
i = 0;
for (c = 31; c >= 0; c--)
{
k = n >> c;
if (k & 1){
string[i] = '1';
i++;
}
else{
string[i] = '0';
i++;
}
if (c == 0){ string[i] = '\0'; }//end the string
}
link->dataItem.dataPtr = &string;
//This prints fine:
printf("\nLoadData(): link->dataItem.dataPtr is now %s\n", (char *)(link->dataItem.dataPtr));
}
void printFunc(node Stack[], int newLink){
//This does not work!
char* temp;
temp = (char*)(Stack[newLink].dataItem.dataPtr);
printf("\npush(): Stack[newLink].dataItem.dataPtr %s\n", temp);
}
Sortie:
Je compile également les dans Visual Studios 2012. Je sais que parfois des pointeurs dans GCC à la Le compilateur Microsoft C peut être un peu différent.
Qu'est-ce que j'écris qui empêche le programme d'imprimer le message void * cast comme char * dans la fonction printFunc
?
'lien-> dataItem.dataPtr = & string;' - cela ne fonctionne pas. Tout d'abord, vous n'avez pas besoin de '&', car le tableau local se désintègre en un pointeur. Deuxièmement, et plus important encore, vous assignez un tableau local à un pointeur à utiliser en dehors de sa portée. C'est un comportement indéfini. –