Problem z kopiowaniem ciagów znaku do tablicy wskazników

0

Witam,
Mam problem którego kompletnie nie rozumiem. W prostym programie jak niżej zadeklarowałem dwie tablice,
temp[] - sluzy do wprowadzenia ciagu znaku od uzytkownika
str[] - to tablica wskaznikow na ciag znaku.
Program przyjmuje ciagi znakow od uzytkownika, ale z niewiadomej mi przyczyny tablica str[], po wyjsciu z pierwszej petli, zostaje zapisana w calosci ostatnim wprowadzonym ciagiem znakow. Tak jakby metoda cin.getline() zamiast tylko pobierac dane i zapisywac do wejscia, umieszczala ostatnio pobrana wartosc w tablicy str[].

#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

int main() {

const int Size=3;
int Max=80;
char temp[Max];
char *str[Size];

str[0]="pierwszy";
str[1]="drugi";
str[2]="trzeci"; //tak dziala, tablica wskaznikow na ciag znakow zadeklarowana poprawnie

for(int i=0;i<Size;i++)
{
	cout<<"\nPodaj "<<i+1<<" ciag znakow: ";
	cin.getline(temp,Max);
	str[i]=temp;
}

for(int i=0;i<Size;i++)
{
	cout<<i+1<<" ciag to: "<<str[i]<<endl;
}
	return 0;
}

cpp

3

Wskaźnik zainicjowany stałym C-stringiem nie jest legalny do przyjmowania / modyfikacji danych (Undefined Behaviour)
Zależnie od systemu, kompilatora i okoliczności może dawać wyjątek systemowy (i to jest najbardziej klarowne), lub być "zamiecione pod dywan" (UB)

Do takiego algorytmu musisz wskaźnik zainicjować new char[ile chcesz], potem MOŻESZ strcpy(wskaźnik, stała)

EDIT: już temat sugeruje, że masz nieprawidłowe myślenie. Nie ma czegoś jak "kopiowanie znaków pod wskaznik", jest "kopiowanie znaków pod adres wskazywany przez wskaźnik"

EDIT2: twój kod pokraka typu "C ze strumieniami". Pisz w prawdziwym C++ z std::string, nie miałbyś ŻADNYCH problemów z tym algorytmem

3

str[i]=temp
Kopiuje tylko adres wskaźnika...

Użyj jak cywilizowane osoby typu std::string
Będziesz miał połowę pracy z głowy

0

Wszystko już jasne, dzieki!

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