Przekopiowanie stringa do innej tablicy za pomoca funkcji

0
  1. Moje pytanie jak chce przekopiować istniejącego stringa do jakiejś tablicy za pomocą funkcji to ta tablice moge utworzyć w tej funkcji " void strcpy" ale bez uzycia wskaznikow tylko tak normalnie(bez przydzielania dynamicznie pamieci)? Bo poki co utworzylem sobie ja w mainie (char cel [dlugosc]) a nastepnie ja przeslalem do funkcji strcpy ( bezsensu mi sie to wydaje).
  2. Jesli chodzi o zainicjowanie tablicy znakowej char cel[dlugosc] to jest to wporzadku ? (przeciez i tak musze przeslac rozmiar do funkcji strcpy) . Trudno ujać mi to w słowa ale chodzi o to czy da sie jakby zainicjowac tablice zeby miala wyznaczony obszar w pamieci a nastepnie przeslac ja do funkcji i tam wpisac istniejacego stringa czyli zrobic to bez zmiennej int dlugosc i bez uzycia wskaznikow.
 
#include <iostream>

using namespace std;
void strcpy(char cel [],char tablica[],int rozmiar)
{
    for(int i = 0 ; i < rozmiar ; i++)
    {
        cel[i]=tablica[i];

        cout << cel[i];
    }

}
int main()
{
    char tab[]={"Ala ma kota"};
    cout << "Tablica znakowa utworzona w funkcji main:\n";
    int dlugosc = sizeof(tab);
    for ( int i = 0 ;i < dlugosc ;i++)
    {
            cout << tab[i];
    }
    cout << "\nSprawdzenie czy przekopiowalismy naszego stringa do innej tablicy :\n";
    char cel[dlugosc];
    strcpy(cel,tab,dlugosc);
    return 0;
}
2

Nie bo wtedy ta tablica jest lokalna i zniknie po wyjściu z funkcji.

A w ogóle to normalnym sposobem kopiowania stringa jest używanie std::string.

0

Czytam symfonie c++ i poki co tam wszystko na char jest robione ale autor mowi na nie string .

1

String po polsku znaczy ciąg znaków. W C i starym C++ był reprezentowany przez tablicę znaków + 0 na końcu. Inne określenia to C-string albo null-terminated string.
W nowym C++ wszystkie operacje na ciągu znaków się robi za pomocą klasy std::string. A przynajmniej powinny.

0

Dokonze to na char poki co . Wiesz moze jak sprawdzic rozmiar danej tablicy ? uzywam sizeof(tablica) ale instrukcja gdy napotyka spacje to konczy sprawdzanie.

 
#include <iostream>

using namespace std;
void strcpy(char cel[],char tekst[])
{
    int i = 0;
    for (i = 0 ; ;i++)
    {
        cel[i]=tekst[i];
         cout << cel[i];
        if(cel[i]==0) break;

    }
    //Zliczyc rozmiar;
    cout << "\n" << sizeof(cel);

    int rozmiar = sizeof(cel);

}
int main()
{
    char tekst[]={"Uwaga samolot sie pali"};
    char komunikat[120];

    strcpy(komunikat,tekst);
    return 0;
}

2

Nie da się sprawdzić rozmiaru tablicy w osobnej funkcji, w środku tej funkcji masz jedynie wskaźnik do tej tablicy i rozmiar wskaźnika nijak ma się do rozmiaru tablicy.
Inaczej mówiąc to:

void strcpy(char cel[],char tekst[])

jest zamieniane na

void strcpy(char* cel, char* tekst)
0

Żeby mieć rozmiar musisz go przekazać parametrem, albo jeżeli wiesz na pewno, że napis ma nulla na końcu to wywołać funkcję strlen()

0

To co jest w OP to bardzo stary styl programowania. Nikt tak nie(powinien) uzywa/c nowoczesnego C++. I tablic sie nie da przeslac jako argumentow, dostajesz pointery za kazdym razem do poczatku tej tablicy.
Jesli chcesz przekopiowac tablice do string (bo adaptujesz stary kod):

string cpy(char* source)
{
string destination {source};
return destination;
}
//Tescio
int _tmain(int argc, _TCHAR* argv[])
{
char arr[] = "Yep, it's that easy!";
string dest;
dest = cpy(arr);
cout << dest;
}
I spokojna.

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