Вместо строки выводится билебирда c++
Выводится cout << nameFigure << endl
непонятно что, хотя в отладчике с
breakpoint'ами значение nameFigure
такое, как нужно. Что не так?
int main(){
// setlocale( LC_ALL,"Russian" );
ifstream fileInput;
ofstream fileOutput;
char* nameOfFileInput;
char* nameOfFileOutput;
char *nameFigure;
char nameFigure1[255];
char strCur[255];
int i;
CalcFigure *calcFigure;
nameOfFileOutput = "output.txt";
nameOfFileInput = "input.txt";
fileInput.open(nameOfFileInput, ios::in);
fileOutput.open(nameOfFileOutput, ios::out);
if (!fileOutput){
cout << ("File output has not created");
return -1;
}
if (fileInput.is_open())
{
i = 0;
while (fileInput.good())
{
fileInput.getline(strCur, 255);
calcFigure = new CalcFigure(strCur);
nameFigure = calcFigure -> GetNameFigure();
cout << nameFigure <<endl;//вот тут непонятно что выводится
//вот тут непонятно что выводится
i++;
}
fileInput.close();
}
else cout << "Unable to open file";
fileOutput.close();
system("pause");
return 0;
}
Класс CalcFigure
#pragma once
#include "Stdafx.h"
#include "Shape.h"
class CalcFigure
{
public:
CalcFigure(char str[]);
~CalcFigure(void);
double CalcSquareFigure();
double CalcPerimeteFigurer();
char* GetNameFigure();
private:
Shape *myShape;
};
Вот методы класса CalcFigure
#include "CalcFigure.h"
#include "Shape.h"
#include "Triangle.h"
#include "Rectangle.h"
#include "Circle.h"
CalcFigure::CalcFigure(char str[])
{
int i;
char nameOfFigure[255];
char* strPointer;
char* space;
int firstWordLen, otherStringLen;
strPointer = str;
firstWordLen = 0,
otherStringLen = 0;
for (i = 0; i<10; i++){
nameOfFigure[i] = ' ';
}
space = strstr(strPointer, ":");
firstWordLen = space - str;
otherStringLen = strlen(str) - firstWordLen - 1;
// Копируем первое слово
strncpy_s(nameOfFigure, &str[0], firstWordLen);
nameOfFigure[firstWordLen] = '\0';
if (strcmp(&nameOfFigure[0],"TRIANGLE") == 0){
myShape = new Triangle(&str[0]);
}
if (strcmp(&nameOfFigure[0],"RECTANGLE") == 0){
myShape = new Rectangle(&str[0]);
}
if (strcmp(&nameOfFigure[0],"CIRCLE") == 0){
myShape = new Circle(&str[0]);
}
myShape -> SetName(&nameOfFigure[0]);
}
CalcFigure::~CalcFigure(void)
{
}
double CalcFigure:: CalcSquareFigure(){
return myShape -> CalcSquare();
}
double CalcFigure:: CalcPerimeteFigurer(){
return myShape -> CalcPerimeter();
}
char* CalcFigure:: GetNameFigure(){
char* nameFigure;
//nameFigure = myShape -> GetName();
nameFigure = myShape->name;
return nameFigure;
}
Источник: Stack Overflow на русском