[C] structure dans un tableau de char
Résolu/Fermé
Hadra38
Messages postés
100
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
3 mars 2011
-
19 oct. 2009 à 18:35
mamiemando Messages postés 33030 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 mars 2024 - 3 nov. 2009 à 19:16
mamiemando Messages postés 33030 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 mars 2024 - 3 nov. 2009 à 19:16
A voir également:
- [C] structure dans un tableau de char
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Dans la table des matières de ce document, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Le fichier contient un tableau présentant un extrait des livres les plus prêtés à paris en 2016. filtrez le tableau pour ne faire apparaître que les bandes dessinées ado. puis filtrez le tableau pour ne faire apparaître que celles dont l'auteur est zep. quel est le titre de la bande dessinée ado de zep qui a été la plus prêtée d'après ce tableau ? ✓ - Forum Windows 10
7 réponses
mamiemando
Messages postés
33030
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 mars 2024
7 736
19 oct. 2009 à 18:50
19 oct. 2009 à 18:50
Tu ne cherche pas a faire simplement un cast ?
#include <stdio.h> int main(){ char *buf = "pouet"; void *p = buf; char *plop = (char *) p; printf("%s\n",plop); return 0; }
Hadra38
Messages postés
100
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
3 mars 2011
11
19 oct. 2009 à 18:59
19 oct. 2009 à 18:59
j'essaie de faire ca mais j'ai des segmentation fault !
Il ne suffit pas d'essayer de 'faire ça'; il faut y arriver... et si tu y arrives -> plus de 'segmentation fault'.
Bon courage.
Bon courage.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
20 oct. 2009 à 08:40
20 oct. 2009 à 08:40
un petit morceau de ton code pourrai nous permettre d'être plus précis. Si il y a une erreur de segmentation, c'est que tu as mal alloué de la mémoire quelque par.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33030
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 mars 2024
7 736
20 oct. 2009 à 18:01
20 oct. 2009 à 18:01
En fait un cast ne fait qu'interpréter différemment à une adresse ce qui s'y trouve. Typiquement un char * désigne l'adresse d'un caractère (ou d'un tableau de caractère, autrement dit d'une chaîne).
Au moment ou tu évalues ce qui se trouve à une adresse 'p' (comme pointeur) en appelant '*p', il faut bien entendu que 'p' soit initialisé avec une adresse valide, sinon on a une erreur de segmentation. Souvent, 'p' est initialisé en prenant l'adresse mémoire d'un objet (par exemple si j'ai un float 'f', &f désigne l'adresse à laquelle est stocké le float).
Je te rappelle qu'un horizon est, pour faire simple, une paire d'accolades (notamment d'une boucle ou d'une fonction) et que les variables déclarées dans un horizon sont désallouées à la sortie de cet horizon. Si tu as besoin d'allouer et de propager une zone mémoire en dehors de son horizon, il faut utiliser une fonction comme malloc (et la libérer avec un free). Si ce que je viens de te dire ne te parle pas je t'invite à lire un tutoriel sur le langage C.
Bonne chance
Au moment ou tu évalues ce qui se trouve à une adresse 'p' (comme pointeur) en appelant '*p', il faut bien entendu que 'p' soit initialisé avec une adresse valide, sinon on a une erreur de segmentation. Souvent, 'p' est initialisé en prenant l'adresse mémoire d'un objet (par exemple si j'ai un float 'f', &f désigne l'adresse à laquelle est stocké le float).
Je te rappelle qu'un horizon est, pour faire simple, une paire d'accolades (notamment d'une boucle ou d'une fonction) et que les variables déclarées dans un horizon sont désallouées à la sortie de cet horizon. Si tu as besoin d'allouer et de propager une zone mémoire en dehors de son horizon, il faut utiliser une fonction comme malloc (et la libérer avec un free). Si ce que je viens de te dire ne te parle pas je t'invite à lire un tutoriel sur le langage C.
Bonne chance
Hadra38
Messages postés
100
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
3 mars 2011
11
3 nov. 2009 à 19:11
3 nov. 2009 à 19:11
merci mamiemando...
en faite mon problème etait bien que lorsque j'utilisais "strcpy" la copie s'arreter au premier octet null en effet c'est le caractere de fin de chaine !
et quand je faisais un (char *) X = (char *) Y; il prend que le premier octet (normal on cast en char !)
il fallait simplement que je fasse ma copie mémoire grâce a memcpy(void* dest, void* src, int tailleCpy)
donc j'ai simplement fait
char buff[TAILLE];
My_Struct donnesPourCast = ....... ;
memcpy((void*)buff, (void*) &donnesPourCast , sizeof(My_Struct));
et le tour est joué ^^
merci a tous !
en faite mon problème etait bien que lorsque j'utilisais "strcpy" la copie s'arreter au premier octet null en effet c'est le caractere de fin de chaine !
et quand je faisais un (char *) X = (char *) Y; il prend que le premier octet (normal on cast en char !)
il fallait simplement que je fasse ma copie mémoire grâce a memcpy(void* dest, void* src, int tailleCpy)
donc j'ai simplement fait
char buff[TAILLE];
My_Struct donnesPourCast = ....... ;
memcpy((void*)buff, (void*) &donnesPourCast , sizeof(My_Struct));
et le tour est joué ^^
merci a tous !
mamiemando
Messages postés
33030
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 mars 2024
7 736
3 nov. 2009 à 19:16
3 nov. 2009 à 19:16
Ah oui, piège classique :-)
Bonne continuation !
Bonne continuation !