probleme pointeur void alors qu'un cast de char* marche :\ - C - Programmation
Marsh Posté le 01-04-2004 à 12:20:35
(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
Marsh Posté le 01-04-2004 à 12:48:52
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" );
Marsh Posté le 01-04-2004 à 13:22:24
obj->nom = (char*)calloc(sizeof("name" ) + 1, sizeof(char));
sprintf(obj->nom, "%s", "name" );
pas mal
merci... g appris à programmer à la roots
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...
Marsh Posté le 01-04-2004 à 13:28:45
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 ?
Marsh Posté le 01-04-2004 à 14:04:36
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.. :\
Marsh Posté le 02-04-2004 à 00:20:28
il renvoie la taille de "name" qui est 5 (parenthèses non obligatoires) et sizeof(char) vaut 1 par définition.
Marsh Posté le 02-04-2004 à 00:21:01
djdie a écrit : il renvoie la taille de "name" qui est 5 (superflues) |
Marsh Posté le 02-04-2004 à 00:30:15
Comment on fait pour passer des arguments à un pthread correctement
Code :
|
Marsh Posté le 02-04-2004 à 01:08:28
Code :
|
Cast superflu aussi, si je ne m'abuse
Marsh Posté le 02-04-2004 à 01:10:40
ah oui
édité ... faut dire que c'est du code récupéré et qui date
Marsh Posté le 01-04-2004 à 12:08:16
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
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
g 50 au lieu de 2, donc y a un pb de poiteur ... et la je capte pas...
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
et moi tres content
merci et a plus pour de nouvelles aventures...
dire que j'ai su faire ca y a trois quatre ans... la honte...