J'ai un problème très simple qui parait tout con, mais je vous mets au défi de le résoudre simplement :
Je possède un tableau de char (tableau) et je dois donner à une méthode (methode) comme paramètre un char* qui a comme valeur tableau[i]. La seule solution que j'ai trouvée est :
char* temp1=(char*)malloc(1);
char* temp2 = (char*)malloc(1);
*temp2 = currentSig[i];
strcat(temp1,temp2);
free(temp2);
methode(temp1);
Mais ce n'est bien sur par ce qu'il y'a de plus efficace ! Alors comment faire nom d'une pipe ? (ça parait tout con, mais je vous lance le défi ;-) )
# Re: Tant qu'à faire de la programmation ..
Posté par Moby-Dik . Évalué à 0.
tableau[i+1] = 0;
methode(tableau + i);
tableau[i+1] = old;
Cela suppose que la méthode prend bien un char * et non un char *&.
# Re: Tant qu'à faire de la programmation ..
Posté par mrq (site web personnel) . Évalué à 2.
char donnees[2] = {currentSig[i], '\0'};
methode(donnees);
# Re: Tant qu'à faire de la programmation ..
Posté par Edouard Gomez (site web personnel) . Évalué à 3.
methode(¤tSig[i]);
sinon:
char plop = currentSig[i];
methode(&plop);
pour ne pas modifier la valeur originale.
[^] # Re: Tant qu'à faire de la programmation ..
Posté par ploum (site web personnel, Mastodon) . Évalué à 1.
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: Tant qu'à faire de la programmation ..
Posté par Edouard Gomez (site web personnel) . Évalué à 2.
[^] # Re: Tant qu'à faire de la programmation ..
Posté par ploum (site web personnel, Mastodon) . Évalué à 1.
merci beaucoup !
ça m'aide et ça m'apprend beaucoup de pouvoir compter sur linuxfr !
Mes livres CC By-SA : https://ploum.net/livres.html
# Re: Tant qu'à faire de la programmation ..
Posté par pasBill pasGates . Évalué à 8.
char *temp2=(char*)malloc(1);
Ca te prend comme place :
2 fois : 4 bytes(ou 8 sur 64bits) pour le pointeur + au moins 8 pour l'allocation selon la heap que tu as, car la heap a pas une granularite de 1 byte mais plutot 8 minimum
Et ca fait passer par malloc --> appel hyper-long
Quand tu fais ton strcat(temp1,temp2); tu fais 2 erreurs :
1) temp1 n'est pas forcement a 0 apres le malloc, si tu fais un strcat, il va essayer d'aller apres le 1er byte, hors du buffer et crasher
2) Si temp2 n'est pas 0, strcat va parcourir le buffer temp2 jusqu'a ce qu'il trouve un 0 --> buffer overflow -> crash
Moi je te proposes plutot :
void mamethode(char *elt);
char montableau[TAILLE_DE_TABLEAU];
mamethode( &(montableau[i]) );
Et la t'as effectivement passe un pointeur sur l'element i de ton tableau.
# Re: Tant qu'à faire de la programmation ..
Posté par Brice2Nice . Évalué à 0.
[^] # Re: Tant qu'à faire de la programmation ..
Posté par Moby-Dik . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.