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

  FORUM HardWare.fr
  Programmation
  C

  probleme pointeur void alors qu'un cast de char* marche :\

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme pointeur void alors qu'un cast de char* marche :\

n°689541
zavatha
Posté le 01-04-2004 à 12:08:16  profilanswer
 

salut à tous,
 
alors ouala
g besoin de stocker dans une structure une autre structure de nature inconnue au moment de la programmation
donc je me suis dit : no problemo, c une affaire pour le pointeur magique void* !!!
 
manque de pot ca ne marche pas  :pfff:  
 
voila le code qui marche :

#include <stdlib.h>
 
typedef struct structurePtr PtrStruct;
typedef struct structurePtr{
  int valeur;
  char *nom;
  char *toto;
}structure;
 
int main(void){
  PtrStruct *obj= 0x0;
  if((obj = (PtrStruct*)calloc(1, sizeof(structure))) != 0x0){
     
    obj->valeur = 1;
    obj->nom = (char*)calloc(sizeof("name" ) + 1, sizeof(char));
    sprintf(obj->nom, "%s", "name" );
    obj->toto = (char*)calloc(1, sizeof(int));
    sprintf(obj->toto, "%d", 2);
 
    printf("%d %s %d\n", obj->valeur, obj->nom, (int)(*(obj->toto)));
  }else{printf("%s\n", "echec allocation" );}
 
  return 0;
}

 
c'est la ruse que j'ai trouvé pour que ca marche... (ca compile et s'exécute sans pb, et gdb ne trouve rien à redire)...
mais ca ne marche pas puisque j'aobtient ca  l'exécution :  
1 name 50  :kaola:  
 
g 50 au lieu de 2, donc y a un pb de poiteur ... et la je capte pas... :cry:  
 
si j'utilise un pointeur void* pour toto que je caste, je génère carément une erreur comme quoi la valeur void n' pas été ingnorée comme elle aurait du avec ecec de la compilation...
si qqu'un a une soluce... moi tout petit  :jap:  
et moi tres content  :bounce:  
 
merci et a plus pour de nouvelles aventures...
 
dire que j'ai su faire ca y a trois quatre ans... la honte... :heink:

mood
Publicité
Posté le 01-04-2004 à 12:08:16  profilanswer
 

n°689566
Moktar1er
No one replies...
Posté le 01-04-2004 à 12:20:35  profilanswer
 

(int)(*(obj->toto)) !!!!!
tu cast ta chaîne en int? m'étonne pas que ça marche pas... regarde le code ASCII du caractère '2' et tu comprendras pourquoi tu trouves 50

n°689598
Taz
bisounours-codeur
Posté le 01-04-2004 à 12:48:52  profilanswer
 

  obj->nom = (char*)calloc(sizeof("name" ) + 1, sizeof(char));
    sprintf(obj->nom, "%s", "name" );  
 
pas mal
 
en clair
 
obj->nom = calloc(sizeof "name", 1);
strcpy(obj->name, "name" );

n°689626
zavatha
Posté le 01-04-2004 à 13:22:24  profilanswer
 

obj->nom = (char*)calloc(sizeof("name" ) + 1, sizeof(char));
   sprintf(obj->nom, "%s", "name" );  
 
pas mal

merci... g appris à programmer à la roots  :D  
 
obj->nom = calloc(sizeof "name", 1);
strcpy(obj->name, "name" );
 
le strcpy ajoute bien le \0 à la fin de la chaine ?
parcequ'avec sprintf ca le fait pas... de souvenance du moins...
 
et pour mon void* ?
 
g vu un topic + loin avec des infos m c pas exactement ce que je veut faire...
j'essaie d'exploiter et je reviens à la charge si je m'en sort pas...  :hello:

n°689629
Taz
bisounours-codeur
Posté le 01-04-2004 à 13:28:45  profilanswer
 

les 2 le font
 
      obj->toto = calloc(1, sizeof(int)); // ? heink ?
      sprintf(obj->toto, "%d", 2);
 
       (int)(*(obj->toto))  // pas mal, tu transforme  le premier caractère d'une chaine en entier ... devine c'est quoi le code ascii de 2 ?


Message édité par Taz le 01-04-2004 à 13:29:03
n°689674
zavatha
Posté le 01-04-2004 à 14:04:36  profilanswer
 

je parlais plutot de ca :
obj->name = calloc(sizeof("name" ), sizeof(char));
 
sizeof renvoie il 4 ou 5 ?
car s'il renvoie 4 et ne tient pas compte du \0 je te dit pas la marde ensuite quand tu accede à ta chaine.. :\

n°690373
djdie
L'heure, c'est l'heure.
Posté le 02-04-2004 à 00:20:28  profilanswer
 

il renvoie la taille de "name" qui est 5 (parenthèses non obligatoires) et sizeof(char) vaut 1 par définition.

n°690375
Taz
bisounours-codeur
Posté le 02-04-2004 à 00:21:01  profilanswer
 

djdie a écrit :

il renvoie la taille de "name" qui est 5 (superflues)

n°690385
Taz
bisounours-codeur
Posté le 02-04-2004 à 00:30:15  profilanswer
 

Comment on fait pour passer des arguments à un pthread correctement
 

Code :
  1. #include <pthread.h>
  2. #include <stdio.h>
  3. struct MyArgs
  4. {
  5.   int i;
  6.   char s[16];
  7. };
  8. void* MyThreadedFunction(void *p)
  9. {
  10.   struct MyArgs *args = p;
  11.   printf("Got %d %s\n", args->i, args->s);
  12.   return NULL;
  13. }
  14. int main()
  15. {
  16.   pthread_t id;
  17.   struct MyArgs args = { 42, "TazForEver" };
  18.   if(pthread_create(&id, NULL, MyThreadedFunction, &args) != 0)
  19.     {
  20.       perror("thread_start" );
  21.       return 1;
  22.     }
  23.   if(pthread_join(id, NULL) != 0)
  24.     {
  25.       perror("thread_join" );
  26.       return 2;
  27.     }
  28.   return 0;
  29. }


Message édité par Taz le 02-04-2004 à 01:10:51
n°690403
djdie
L'heure, c'est l'heure.
Posté le 02-04-2004 à 01:08:28  profilanswer
 

Code :
  1. struct MyArgs *args = (struct MyArgs *) p;

Cast superflu aussi, si je ne m'abuse :D


Message édité par djdie le 02-04-2004 à 01:08:59
mood
Publicité
Posté le 02-04-2004 à 01:08:28  profilanswer
 

n°690404
Taz
bisounours-codeur
Posté le 02-04-2004 à 01:10:40  profilanswer
 

ah oui
 
édité ... faut dire que c'est du code récupéré et qui date  :whistle:


Message édité par Taz le 02-04-2004 à 01:11:16

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

  probleme pointeur void alors qu'un cast de char* marche :\

 

Sujets relatifs
problème de téléchargment de fichierRequete SQL Oracle : Pourquoi ca ne marche pas ?
Probléme fonction mailProbléme avec une requête PHP/MySQL
probleme de window.openproblème de format de date
probleme projet casse brique ...probleme fin de session
[C] Caster un int en void*Problème d'affichage du texte sous IE
Plus de sujets relatifs à : probleme pointeur void alors qu'un cast de char* marche :\


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