Непечатаемый символ после генерации случайной n-байтовой строки Base64

Я пытался сгенерировать 32-байтовую строку base64 с использованием openssl, но она не всегда создает 32-байтовую строку, а иногда вывод искажается и не отображается правильно

#include <openssl/rand.h>
#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/buffer.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int Base64Encode(const unsigned char* buffer, unsigned char** b64text) { //Encodes a binary safe base 64 string
    BIO *bio, *b64;
    BUF_MEM *bufferPtr;

    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new(BIO_s_mem());
    bio = BIO_push(b64, bio);

    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); //Ignore newlines - write everything in one line
    BIO_write(bio, buffer, strlen(buffer));
    BIO_flush(bio);
    BIO_get_mem_ptr(bio, &bufferPtr);
    BIO_set_close(bio, BIO_NOCLOSE);
    BIO_free_all(bio);

    *b64text=bufferPtr->data;

    return (0); //success
}

int main() {
    unsigned char buffer[35], *base64EncodeOutput;
    int ret = RAND_bytes(buffer, 32);
    buffer[32]='\0'; // Null terminate

    (void)Base64Encode(buffer, &base64EncodeOutput);
    (void)printf("Return value of the operation was: %d\n%s\n", ret, base64EncodeOutput);

    return EXIT_SUCCESS;
}

Компилирование и запуск сgcc rand_str.c -lcrypto && ./a.out | tail -1иногда выдает что-то вроде:

I6YaDVSRPw5Ux+2paY4u4ToMKtZXQoBj`�

И иногда вывод не даже 32 байта в длину.

Моя цель - повторить, что делает эта команда:openssl rand -base64 32

Что мне нужно сделать по-другому?

Ответы на вопрос(3)

Ваш ответ на вопрос