J'avais essayé de le faire moi-même mais j'ai échoué (je suis tenté de le refaire pour l'apprentissage mais j'en ai juste besoin pour un exemple de programme). Essentiellement, je veux représenter un nombre binaire mais piétinais bien sûr de l'octet le plus proche avec 0
« s donc j'ai trouvé une fonction ici sur une autre question:Ma fonction de remplissage de chaîne en C ne fonctionne pas?
char * string_pad(char * string, size_t padlen, char * pad) {
size_t lenstring = strlen(string);
size_t lenpad = strlen(pad);
char * padded = (char*)malloc(lenstring + lenpad + 1);
strncpy(padded, string, lenstring); /* copy without '\0' */
padded += lenstring; /* prepare for first append of pad */
for(padlen += 1; padlen > 0; padlen--, padded += lenpad)
strncpy(padded, pad, lenpad);
*padded = '\0';
return padded;
}
Je l'appelle comme ceci:
printf("Test: %s\n", string_pad(dec2bin(~myInt), 32, "0"));
Malheureusement, il imprime "Test:" mais rien d'autre. Mon dec2bin
renvoie un pointeur char simple d'ailleurs si vous avez besoin de savoir.
Qu'est-ce qui semble l'empêcher de faire quoi que ce soit?
Pourquoi cette fonction accepte-t-elle le caractère char * pad et pas le caractère, donc je peux le faire avec '0', le '0' fonctionnera-t-il ou ajoutera-t-il un terminateur nul?
EDIT: Ou quelqu'un peut-il fournir un exemple simple (ou ce que j'ai besoin de faire quoi) pour remplir à gauche pour cela? Cet extrait ne semble pas être tout ce que bon ..
Je pensais à la création d'un chararray initialisé à zéro, puis copier le fichier binaire après cela, mais comment le faire fonctionner m'a échappé ..
Pour les démarreurs, le malloc semble faux - il devrait allouer au moins (padlen + 1) octets. –
Noté, je me demande si cet extrait de code vaut la peine d'être corrigé .. mon seul autre extrait à le faire utilise sprintf incorrectement: P. –
F: La manière dont vous utilisez cette fonction est une fuite de mémoire. Il renvoie un pointeur vers la mémoire mallocée et vous utilisez le pointeur comme paramètre pour 'printf'. Il utilise le pointeur comme une variable temporaire et maintenant vous n'avez aucun moyen de libérer la mémoire. – Blastfurnace