Ошибка при чтении символов строки
Основное задание: Напишите функцию, выполняющую перевод положительного целого числа из десятичной в двоичную форму, используя логические операции, и возвращает результат в виде строки.
Возникает следующая ошибка - 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;
}
