C'est ce que j'ai essayé, ma logique est que mon tmp
décaler à gauche 31 fois sera comparé à l'entier d'entrée utilisateur I
et une valeur de 1 ou 0 sera insérée à l'index str[0]
->str[31]
et le I null se terminent str[32]
avec le \0
.Conversion d'un nombre entier en chaînes binaires dans c
Cependant, j'obtiens une erreur de segmentation.
P.S. Je ne suis pas autorisé à changer les paramètres de cette fonction et mon professeur a mis la taille de str
à 33 dans le principal, ce qui, je ne permets pas de changer non plus.
void int2bitstr(int I, char *str) {
int tmp = 1 << 31;
do{
*str++ = !!(tmp & I) + '0';
} while(tmp >>= 1);
*str = '\0';
}
'int' est signé. L'avez-vous oublié? –
J'utilise toujours [Valgrind] (https://www.valgrind.org) pour comprendre les erreurs de segment –
Sur la base de ce qu'Eugene a dit, je pense que vous seriez surpris de votre sortie si vous imprimez la valeur de 'tmp' sur votre console avec chaque itération, en particulier en considération de votre clause de sortie de boucle. – WhozCraig