[C]- Problème sur les chaîne de caractère
Résolu/Fermé
Panda jack
Messages postés
54
Date d'inscription
dimanche 13 mars 2011
Statut
Membre
Dernière intervention
18 avril 2012
-
20 juin 2011 à 14:47
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 juin 2011 à 00:34
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 juin 2011 à 00:34
A voir également:
- [C]- Problème sur les chaîne de caractère
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractère spéciaux - Guide
- Plus de chaine tv - Guide
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 840
22 juin 2011 à 00:34
22 juin 2011 à 00:34
Bonjour,
Tu ne peux pas faire ça.
nomDeff est un tableau, tu ne peux donc pas modifier son adresse. Si tu veux modifier, il faut utiliser des pointeurs (et non des tableaux qui ne sont pas des lvalues).
De plus, attention deff[0] est un int et non un pointeur sur un int. Il faudrait utiliser un tableau de pointeur. Sinon cela ne sera pas portable (problème de l'endianness).
int fight(int *att, int *deff){ int retour=27, jetAtt, jetDeff, diff; float inter; char nomDeff[20]={0}, nomAtt[20]={0}; nomDeff=deff[0]; nomAtt=att[0];
Tu ne peux pas faire ça.
nomDeff est un tableau, tu ne peux donc pas modifier son adresse. Si tu veux modifier, il faut utiliser des pointeurs (et non des tableaux qui ne sont pas des lvalues).
De plus, attention deff[0] est un int et non un pointeur sur un int. Il faudrait utiliser un tableau de pointeur. Sinon cela ne sera pas portable (problème de l'endianness).
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
21 juin 2011 à 20:07
21 juin 2011 à 20:07
Bonjour,
Je ne sais pas si c'est une bonne idée d'utiliser un type différent pour sauvegarder des adresses d'un autre type, normalement les adresses on la même taille d'après ce que j'ai compris : si cpu 32bits alors adresse est de longueur 32bits, mais il faut être sûr que le type qui les contient fasse bien 32bits, ici c'est le int, et en unsigned je pense que ce soit plus correct.
N'ai pas approfondi plus la question mais c'est faisable cependant je vous conseil d'utiliser des structures car c'est je pense pas portable de coder ainsi.
un test qui reprend ce que vous voulez faire :
Je ne sais pas si c'est une bonne idée d'utiliser un type différent pour sauvegarder des adresses d'un autre type, normalement les adresses on la même taille d'après ce que j'ai compris : si cpu 32bits alors adresse est de longueur 32bits, mais il faut être sûr que le type qui les contient fasse bien 32bits, ici c'est le int, et en unsigned je pense que ce soit plus correct.
N'ai pas approfondi plus la question mais c'est faisable cependant je vous conseil d'utiliser des structures car c'est je pense pas portable de coder ainsi.
un test qui reprend ce que vous voulez faire :
#include <stdio.h> #include <stdlib.h> #include <string.h> void plop(unsigned int *test) { char *recup;/* un pointeur de char qui recup l'addr */ recup=(char*)test[4];/* recup l'addr qui est à l'emplacement 4 */ printf("%s\n",recup);/* affiche la chaine */ } int main(void) { unsigned int ti[20]; char *str; str=malloc(sizeof(char)*20); strcpy(str,"hello world\0");/* place un truc dans str */ ti[4]=(unsigned int)str;/* addr de str a l'emplacement 4 du tab ti */ plop(ti);/* envoie le tab ti dans la fonc plop */ free(str); return 0; }