Класс, возвращающий мусорные строки в C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Класс, возвращающий мусорные строки в C++

Сообщение Anonymous »

Как следует из названия, мой класс возвращает мусорные строки, и я не могу понять, в чем проблема. Обратите внимание, что этот код написан на раннем языке C++, и у меня нет доступа к пространствам имен (т. е. нет std::string).
Я просматривал вопросы и ответы перед публикацией, но большинство других вопросов предполагают более современную реализацию языка.
файл определения класса:

Код: Выделить всё

#ifndef SOFTWARE_HPP
#define SOFTWARE_HPP 1

#include 
#include 

class Software
{
char* name;

public:
Software( void );
Software( const char* Name );
~Software( void );

void Name( const char* Name );
char* Name( void ) const;
};

void GetSoftware( Software* (&software)[], const unsigned short ArraySize );

#endif
Файл реализации класса:

Код: Выделить всё

#include "software.hpp"

const unsigned short _MAX_SOFTWARE_NAME = 21;

Software::Software( void )
{
name = new char[_MAX_SOFTWARE_NAME + 1];

name[0] = NULL;
}

Software::Software( const char* Name )
{
name = new char[_MAX_SOFTWARE_NAME + 1];

strncpy( name, Name, _MAX_SOFTWARE_NAME );
}

Software::~Software( void )
{
delete[] name;
}

void Software::Name( const char* Name )
{
if ( strlen( Name ) < _MAX_SOFTWARE_NAME ) {
strncpy( name, Name, _MAX_SOFTWARE_NAME );
}
}

char* Software::Name( void ) const
{
return name;
}

void GetSoftware( Software* (&software)[], const unsigned short ArraySize )
{
for ( short i = 0; i < ArraySize; ++i ) {
software[i] = new Software( "SoftwareName" );
}
}
Затем в моей основной программе:

Код: Выделить всё

#include 
#include 
#include 
#include "software.hpp"

int main( int argc, char* argv[] )
{
Software* software[16] = { NULL };
GetSoftware( software, 16 );

for ( int i = 0; i < sizeof( software ) / sizeof( software[0] ); ++i ) {
printf( "Software %s", software[i]->Name() );
}
}
Итак, если я все делаю правильно, я передаю свой массив объектов по ссылке. Если я распечатаю Software::Name из файла реализации, символы будут в порядке. Но когда я пытаюсь вывести строку из функции main(), я получаю кучу мусорных символов.
Одно интересное замечание: если я запускаю свое приложение из своего На машине разработки под Windows NT символы печатаются нормально, но при запуске под настоящей DOS я получаю искажения.
Кстати, это проект модели средней памяти. Есть идеи, что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/787 ... rings-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»