[C++] funkcje i struktura

0

w programie chodzi mniej wiecej o to:

Funkcja set ma miec pierwszy parametr jako referencja, ma nastapic alokacja pamieci na wynik sprawdzenia, pole str struktury beany ma wskazywac nowy blok, testing ma zostac skopiowane do nowego bloku, pole ct ma zostac ustawione jako dlugosc lancucha.

Funkcja show ma pokazywac napis kilka razy - (drugi parametr o tym decyduje)

oto moj kod, wyrzuca bledy:

#include <iostream>

using namespace std;

#include <cstring>

struct stringy {
    char* str;
    int ct;
};

 void set(stringy& fasolka, char* wks);
 void show(stringy& fasolka, int n=1);
void show(char tab[], int n=1);


int main()
{
    stringy beany;
    char testing[] = "Rzeczywistosc to juz nie to co kiedys.";

    set(beany, testing);


    show(beany);
    show(beany, 2);
    testing[0] = 'D';
    testing[1] = 'u';

    show(testing);
    show(testing, 3);
    show("Gotowe!");

    return 0;
}
void set(stringy& fasolka, char* wks){
    char* (*ps)=new char*;

   fasolka.str=*ps;

    int i=0;

    while (wks[i]!=0){
        *ps[i]=wks[i];
        i++;
    }

    ps[i]=0;
    i++;

    fasolka.ct=i;
}
void show(stringy& fasolka, int n){
    while(n>0){
        cout<<fasolka.str;
        n--;
    }

}
void show(char tab[], int n){
 while(n>0){
     cout<<tab;
     n--;
 }

}
0
char* (*ps)=new char*;

A po co alokujesz wskaźnik char*, jeśli chcesz przydzielić pamięć, żeby pomieścić w niej zawartość wks?

0

Tekst napisany tak, że dostaje bólu głowy, to samo kod. Przypuszczam, że funkcja set ma wyglądać tak:

void set(stringy& fasolka, char* wks) {
    int lenght = strlen(wks);

    if(lenght>0) {
         fasolka.str = new char[lenght +1]; //
         strcpy(fasolka.str, wks); // kopiuj zawartość
         fasolka.ct = lenght;
    } else {
         fasolka.str = 0;
         fasolka.ct = 0;
    }
}
0

Cześć,
Czy możecie mi powiedzieć czy po użyciu operatora new nie powinnyśmy zwolnić tą pamięć na końcu programu za pomocą delete?? Jeśli tak to jak wyglądałaby ta linijka kodu?

fasolka.str = new char[lenght +1];

Z góry dzięki za odpowiedź.
Pozdrawiam

0

Jeśli ma być to prawidłowo, brakuje zwolnienia zaalokowanej pamięci...

0

Jeśli tak to jak wyglądałaby ta linijka kodu?

Tam gdzie ostatni raz używasz wskaźnika na alokowany blok pamięci.
Jeśli jedynym wskaźnikiem ma być stringy::str to najlepiej zdefiniować destruktor.

0

Mogę się mylić, ale ta linijka:

char testing[] = "Rzeczywistosc to juz nie to co kiedys.";

chyba nie ma gwarancji, że na końcu znajdzie się '\0', w związku z czym liczenie przy pomocy strlen może się nie udać.

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