Ошибка при чтении символов строки

Основное задание: Напишите функцию, выполняющую перевод положительного целого числа из десятичной в двоичную форму, используя логические операции, и возвращает результат в виде строки.

Возникает следующая ошибка - 0xcccccccc <Ошибка при чтении символов строки.> тип:char *

Скрин ошибки

#include <stdlib.h>
#include <fstream>
#include <cstdio>
#include <string.h>
#include <stdio.h>
#include <cstdlib>
#include <cstring>
using namespace std;

char *f(unsigned int a) {
    int size = sizeof(int) * 8; // количество бит в числе
    char *str = new char[size + 1]; // память под строку по количеству бит
    unsigned int p = 1; // переменная для проверки разрядов

    for (int i = 0; i < size; i++) {
        if (a & p) str[i] = 1;

        else str[i] = 0; // проверка разряда
        p = p << 1; // сдвиг единицы влево для проверки следующего разряда
    }

    for (int i = size - 1; i >= 0; i--)
        if (str[i] == 1) { //пропускаем нули до места, когда впервые появляется 1
            str[i + 1] = '\0';
            break;

        }

    for (int i = 0; i <= size / 2; i++) {
        char t = str[i];
        str[i] = str[size - i - 1];
        str[size - i - 1] = str[i];

    }

    return str;
}


int main() {

    int n = 2;
    cout << n << endl;
    char *s = f(n); //вызываем функцию и получаем двоичную запись числа
    cout << s;
    delete[]s; //освобождаем память
}

В этих местах появляется ошибка

char *s = f(n);
char *str = new char[size + 1];

Ответы (1 шт):

Автор решения: Zhihar

никакой ошибки не выдает правда и код не работает :)

Я так понимаю вы хотите число перевести в 2ичный вид и записать в строку?

У вас уже вот тут ошибка:

if (a & p) str[i] = 1;

почему вы пишите 1, а не '1'?

Ну и дальше тоже ошибки - не работает программа, выводит пустую строку

По идее ваш код должен быть таким:

char* f(unsigned int a) {
    const int size = sizeof(int) * 8; // количество бит в числе
    char* str = new char[size + 1]; // память под строку по количеству бит

    bool isFirst = false;
    int pos = 0;

    for (int i = size - 1; i >= 0; i--) {
        if ((a & (unsigned int)(1 << i)) && !isFirst)
            isFirst = true;

        if (isFirst) {
            str[pos] = (a & (unsigned int)(1 << i)) ? '1' : '0';

            pos += isFirst ? 1 : 0;
        }
    }

    str[pos] = '\0';

    return str;
}
→ Ссылка