[C]- Problème sur les chaîne de caractère
Résolu
Panda jack
Messages postés
54
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'éssaye de faire ceci :
concrètement att[0] (tout comme deff[0]) contiens un pointeur vers une chaine de caractère. Il me semblait donc logic de pouvoir le récupérer mais j'obtiens cette erreur :
j'éssaye de faire ceci :
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];
concrètement att[0] (tout comme deff[0]) contiens un pointeur vers une chaine de caractère. Il me semblait donc logic de pouvoir le récupérer mais j'obtiens cette erreur :
combat.c:32: error: incompatible types in assignmentMerci d'avance aux idées constructive.
A voir également:
- [C]- Problème sur les chaîne de caractère
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractere vide - Guide
2 réponses
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).
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; }