funkcja strcpy() visual studio

0

Od pewnego czasu mam pewien problem, bo visual studio pokazuje mi błąd gdy użyje funkcji strcpy() (włączyłem bibliotekę cstring). Na codeblocksie nie mam żadnych problemów. Poniżej wklejam przykładowy program. Może ktoś wie czemu tak się dzieje?

#include <iostream>
#include <cstring> 

using namespace std;

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


void set(stringy&, char*);
void show(const stringy, int = 1);
void show(char*, int = 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& x, char* napis)
{
    int length = strlen(napis)
    char* pf = new char[length+1];
    pf = x.str;

    strcpy(pf, napis);
    x.ct = strlen(pf);
}

void show(const stringy x, int n)
{
    while (n > 0)
    {
        cout << " 1) Napis: " << x.str;
        n--;
    }
    cout << endl << endl;
}
void show(char* word, int n)
{
    while (n > 0)
    {
        cout << " 2) Napis: " << word;
        n--;
    }
    cout << endl << endl;
}
0

No ale może wklej treść komunikatu o błędzie...

Poza tym w kodzie są inne błędy i na pewno to co wyżej wkleiłeś to nie jest to co uruchamiasz, bo kod się nie kompiluje.

0

Wygląda jak jakaś forma GPF lub innego wyjścia w krzaki.
Może ze względu na:

<source>: In function 'int main()':
<source>:27:10: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   27 |     show("Gotowe!");
      |  

Jeden kompilator skomplikuje tak, inny inaczej i problemy gotowe.

Po gcc przeszło, a z clanga wyleciało. Musi być jakiś GPF.

0

@b4rteq: Ale to ma być w końcu C/C++?
Tu masz taki miks, że nie wiadomo o co chodzi, raz używasz "char*", raz jakiejś klasy "stringy", po co?
C++ ma zapewnioną w standardzie implementację stringa.
Chyba, że jakieś eksperymenty robisz o których nie wspomniałeś.

A co do błędu, to masz napisane, funkcja wymaga jako argumentu "char*", lub "const stringy", robiąc show("Gotowe"), przekazujesz do funkcji "const char".

1

@b4rteq: Pomerdałeś przypisanie.

 void set(stringy& x, char* napis)
 {
     int length = strlen(napis)
     char* pf = new char[length+1];
     pf = x.str;  // <- wyciek
 
     strcpy(pf, napis);  // <- boom!
     x.ct = strlen(pf);
 }
2

screenshot-20211205141527.png

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