• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kopiowanie tekstu z użyciem wskaźników

Object Storage Arubacloud
+1 głos
481 wizyt
pytanie zadane 26 kwietnia 2018 w C i C++ przez Agnes Użytkownik (990 p.)
edycja 29 kwietnia 2018 przez Agnes

Napisz program, używając wskaźników odwracający podany tekst. 

const int n = 6;
char z1[n] = { 't', 'e', 'k', 's', 't', '\0' };
char z2[n];

void kopia1(char a[n], char b[n])
{
	for (int i = 0; i < n; i++)
	{
		char *ptr = a[i];
		b[i] = *ptr;
	}
	for (int i = n; i < n; i++) cout << b[i];

	
	
}
int main()
{
	kopia1(z1, z2);

	getchar();
}

Dlaczego w linii ósmej jest błąd?

EDIT: Przepraszam, tak się kończy dodawanie posta o północy -.- Chodziło mi o polecenie, gdzie trzeba było skopiować zawartość tablicy do drugiej tablicy docelowej

2 odpowiedzi

+1 głos
odpowiedź 26 kwietnia 2018 przez Patrycjerz Mędrzec (192,320 p.)

Wyrażenie `a[i]` jest typu `char`, nie `char *`. Z kolei druga pętla jest niepoprawnie napisana. Jeśli ma wypisywać znaki w odwrotnej kolejności, to musi ona wyglądać tak:

for (int i = n - 2; i >= 0; i--) cout << b[i]; // n - 2, ponieważ nie chcemy wypisać zera
0 głosów
odpowiedź 26 kwietnia 2018 przez mokrowski Mędrzec (155,460 p.)
edycja 26 kwietnia 2018 przez mokrowski

Jeśli polecenie brzmi jak to napisałaś, to brniesz w ślepy zaułek. Odnosząc się do Twojego kodu intencję kopi możesz zrealizować tak:

for (size_t i = 0; i < n; ++i)
{
        b[i] = a[i];
}

Ale nie jest spełnione wymaganie polecenia że są to wskaźniki.

Obrócenie napisu można z łatwością wykonać "w miejscu" bez alokowania dodatkowej pamięci. Wystarczy:

1. Do funkcji podać wskaźnik na pierwszy element napisu.

2. Funkcja z użyciem strlen(...) (lub std::strlen(..) ) z <string.h> (lub <cstring>), obliczy długość łańcucha. Przed wskaźnikiem końca jest ostatni znak. Hmm.. to ma być w C czy C++?

3. Wymieniasz znaki z początku i końca oraz inkrementujesz wskaźnik początku i dekrementujesz wskaźnik końca. Robisz to do momentu zrównania się wskaźników.

PS. Kopiowanie w końcu czy odwracanie i C czy C++?

komentarz 29 maja 2018 przez Agnes Użytkownik (990 p.)
Kopiowanie, C++

I wszystko by było ok, gdyby nie to, że wartość zwracana strlen() nie może być przypisana do stałej. A stała jest tu potrzebna, by zainicjalizować tablicę.
komentarz 29 maja 2018 przez mokrowski Mędrzec (155,460 p.)

Nie nie jest potrzebna stała. Takie tablice (z wielkością opisaną przez parametr nie będący stałą) w C++ alokuje się dynamicznie. Alokowanie tablic statycznie jest właściwością C, nazywa się VLA (ang. Variable Length Array) i jest często dostarczane jako rozszerzenie dla kompilatora C++ ale jest poza standardem C++.

Podobne pytania

0 głosów
1 odpowiedź 532 wizyt
0 głosów
1 odpowiedź 247 wizyt
0 głosów
1 odpowiedź 414 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez kidcudi6 Nowicjusz (170 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...