Wypisanie char

0

Problem polega na tym że nie rozumiem pewnego zagadnienia.

main.cpp

#include <iostream>
#include "Data.h"
#include "Napis.h"

using namespace std;

int main()
{
	Napis n1("Testowy Napis");

	//SPRAWDZENIE FUNKCJI Zwroc()
	const char *tren = n1.Zwroc();
	cout<<n1.Zwroc();   <---- WYWALA KRZAKI JAKIES I CZERWONY OKIENKOWY ERROR
}
 

napis.h

 
#pragma once

class Napis{
    char m_pszNapis[40];

public:
    Napis(char napis[40]="tekst");
    ~Napis();
    const char* Zwroc() const;
    void Ustaw(const char* nowy_napis);
    void Wypisz() const;
    void Wpisz();
    int SprawdzNapis(const char* por_napis) const;

};

napis.cpp

#include <iostream>
#include <string>
#include <cstring>
#include "Napis.h"

using namespace std;

const char* napiss;


Napis::Napis(char napis[40]){
    m_pszNapis[40] = napis[40];
}
Napis::~Napis(){;}



const char *Napis::Zwroc() const{
    return m_pszNapis;
} 

Chciałbym wypisać zawartość funkcji Zwroc(). Ona jest typu const char* i zwraca tablice znaków. Nie mam pojęcia jak do tego podejść aby wypisać ją na ekran za pomocą cout.

Nie rozumiem też dlaczego w instrukcji którą rozwiązuje nagłówek funkcji nagle jest typu wskaźnikowego const char*.

Proszę o pomoc jak to rozwiązać! Chce w mainie sprawdzić działanie funkcji Zwroc(); za pomocą cout w widoczny sposób.

DZIĘKUJĘ

4

m_pszNapis[40] = napis[40]; W tym miejscu nie przypisujesz napis do m_pszNapis, tylko do 40 znaku (a w zasadzie 41, bo indeksuje się od 0) m_pszNapis wstawiasz 40 znak napis.

8

m_pszNapis[40] = napis[40];
UB. Przypisujesz do 41. elementu 40-elementowej tablicy 41. element podanego napisu (również w tym przypadku krótszego). Inaczej mówiąc: nie kopiujesz wskaźnika.

Możesz to poprawić na strncpy(m_pszNapis,napis, sizeof(m_pszNapis)); i zadziała, ale to nadal będzie poprawne tylko jeśli ręcznie wyzerujesz ostatni znak przy zbyt długim stringu.

Dodatkowo Napis n1("Testowy Napis"); nie powinno się skompilować, bo C++ nie zezwala na przypisywanie literałów znakowych do nie-const wskaźników na char.

1 użytkowników online, w tym zalogowanych: 0, gości: 1