Форум программистов, компьютерный форум CyberForum.ru

Вывод char* вызывает System.NullReferenceException - C++

Восстановить пароль Регистрация
 
final_headshot
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 7
16.01.2014, 20:17     Вывод char* вызывает System.NullReferenceException #1
Здраствуйте.
Требуется написать функцию, которая преобразует число из десятичной системы в двоичную. Вот что получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "stdafx.h"
#include <iostream>
 
using namespace System;
using namespace std;
int a[10]={512, 256, 128, 64, 32, 16, 8, 4, 2, 1};
 
void NumberAsBinary(
    char *       _result, // строка с результатом
    unsigned int _number  // произвольное число
  )
{
  int temp = _number;
  for (int i = 0; temp != 0, i<10; i++)
  {
    if (temp>=a[i])
    {
      temp-=a[i];
      _result+='1';
    }
    else _result+='0';
  }
  cout<<"norm\n";
}
int main(array<System::String ^> ^args)
{
  char *r;
  unsigned int n;
  cout<<"Enter value: ";
  cin>>n;
  NumberAsBinary(r, n);
  cout<<"Binary: "<<*r;
  system("pause");
  return 0;
}
Вопрос не в правильности данного кода. Дело в том, что после вводадесятичного числа, выполнения этой функции и вывода строки "Binary: " появляется следующая ошибка. Объясните, в чем дело?
п.с. Результат функции обязательно должен быть char *
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 20:17     Вывод char* вызывает System.NullReferenceException
Посмотрите здесь:

Вывод результата system в файл C++
вывод массива char* C++
C++ Где и почему используют ту или иную строку std::string, char[], System::String^ ?
C++ Вывод system() в программу
C++ Преобразование Char в System::String
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
16.01.2014, 21:46     Вывод char* вызывает System.NullReferenceException #2
Цитата Сообщение от final_headshot Посмотреть сообщение
Вопрос не в правильности данного кода.
а в чем еще то?
Цитата Сообщение от final_headshot Посмотреть сообщение
char *r;
память то кто выделять будет?

напиши хотя бы
C++
1
char r[100];
final_headshot
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 7
17.01.2014, 21:10  [ТС]     Вывод char* вызывает System.NullReferenceException #3
Спасибо, а не подскажите, как правильно добавлять символы к char*? Я немного переделал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "stdafx.h"
#include <iostream>
 
using namespace System;
using namespace std;
int a[10]={512, 256, 128, 64, 32, 16, 8, 4, 2, 1};
 
void NumberAsBinary(
    char *       _result[], // строка с результатом
    unsigned int _number  // произвольное число
  )
{
  int temp = _number;
  for (int i = 0; temp != 0, i<10; i++)
  {
    if (temp>=a[i])
    {
      temp-=a[i];
      *_result[i]='1';
    }
    else *_result[i]='0';
  }
  cout<<"norm\n";
}
int main(array<System::String ^> ^args)
{
  char *r[11];
  unsigned int n;
  cout<<"Enter value: ";
  cin>>n;
  NumberAsBinary(r, n);
  cout<<"Binary: "<<*r<<"\n";
  system("pause");
  return 0;
}
Но во время выполнения функции NumberAsBinary вылетает исключение
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
17.01.2014, 21:27     Вывод char* вызывает System.NullReferenceException #4
Цитата Сообщение от final_headshot Посмотреть сообщение
char * * * * _result[],
вот этим ты передаешь массив указателей
или как было
C++
1
 char *_result
указатель на массив
или массив char-ов
C++
1
char _result[]
Цитата Сообщение от final_headshot Посмотреть сообщение
char *r[11];
вот здесь ты опять создаешь массив указателей
тебе нужно объявить
C++
1
char r[11]
и тогда при вызове
NumberAsBinary(r, n); передастся адрес на массив т.е char *
final_headshot
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 7
17.01.2014, 21:34  [ТС]     Вывод char* вызывает System.NullReferenceException #5
ValeryS, тогда появляется ошибка error C2664: NumberAsBinary: невозможно преобразовать параметр 1 из "char [11]" в "char *[]" при вызове функции
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
17.01.2014, 21:38     Вывод char* вызывает System.NullReferenceException #6
да и в функции у тебя накосячено
во первых нет завершающего 0
во вторых
Цитата Сообщение от final_headshot Посмотреть сообщение
int a[10]={512, 256, 128, 64, 32, 16, 8, 4, 2, 1};
можно и без этого обойтись
вот примерно вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void NumberAsBinary(
  char * result, // строка с результатом
  unsigned int _number  // произвольное число
 )
{
 int i=10;
 result[i]='\0'; // заносим 0 в конец строки 
for(;i>-1;i--)
  {
    result[i]=n%2+'0'; // выделяем младший разряд и добавляем к символу "0", если будет 1 то запишем "1" если 0 то запишем "0"
    n/=2;// сдвигаем вправо число ( делим на 2) подготавливаем следующий разряд 
  }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2014, 19:08     Вывод char* вызывает System.NullReferenceException
Еще ссылки по теме:

C++ Вывод char из функции
Вывод массива char C++
C++ Char вывод

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
final_headshot
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 7
18.01.2014, 19:08  [ТС]     Вывод char* вызывает System.NullReferenceException #7
ValeryS, спасибо большое, работает
Yandex
Объявления
18.01.2014, 19:08     Вывод char* вызывает System.NullReferenceException
Ответ Создать тему
Опции темы

Текущее время: 16:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru