Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program kopiujący C-string z tablicy do innej tablicy.

Ostatnio zmodyfikowano 2016-09-25 22:58
Autor Wiadomość
mateczek
» 2016-09-25 20:31:04
Dostałeś już poprawne odpowiedzi więc sorki że trochę przejaskrawię
C/C++
char * napis = "aaaaaaaaaaaaaa";
char * wsk; //pokazuję sobie dowolną komórkę w pamięci może gdzieś w biosie ??:P
* wsk = * napis; // gdzieś sobie skopiowałem tą literkę ale gdzie?? może to sterownik karty graficznej??
* napis = 'b'; // teoretycznie nie wolno bo wskaźnik napis pokazuje na stały ciąg znakowy!!!!

a tak jest dobrze
C/C++
#include <iostream>
using namespace std;

int main()
{
    //A tak jest dobrze
    char * napis = "ala ma kota";
    char * wsk1 = new char[ 20 ]; // poprosiłem system operacyjny o pamięć dla mojego programu. system dał mi adres początku bloku pamięci
    //teraz wsk1 pokazuje początek bloku pamięci którą to pamięć dostałem od systemu
    for( int i = 0; napis[ i ]; i++ ) {
        wsk1[ i ] = napis[ i ];
    }
    cout << wsk1 << endl;
    cout << napis << endl;
   
}
P-152012
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-25 20:44:37
ok, rozumiem, tylko w takim razie dlaczego poprawne jest takie wyrażenie
C/C++
while(( *( wsk++ ) = *( wsk2++ ) ) ) // rozumiem idee, wykonuje sie dopóki nie trafi na NULL, znak kończący stringa, tylko dlaczego tu już możemy tak robić

Ten przykład wziąłem z książki.  tam było to(ta pętla) zawarte w funkcji, kopiującej znaki z 1 C-Stringa do drugiego, przyjmującej argumenty  const char* zrodlo i char * cel. Przy czym argumentami aktualnymi, które zostały
przesłane przy wywołaniu funkcji były tablice:
int skad[]{"tu jest string"};
int dokad[80];
czyli:
kopiuj(skad, dokad);
Nie wiem czy to, że przesyłanymi argumentami były tablice a nie wskaźniki na tablice ma jakieś znaczenie?
P-152013
mateczek
» 2016-09-25 20:49:13

while( (*(wsk++)= *(wsk2++)) )
w twoim programie z góry wątku nie możesz tak robić !!
1aam2am1 wysłał Ci prawidłowy kod. W książce też jest prawidłowy. Ale twój nie

AD2 tablica i wskaźnik to jest to samo! Nigdzie nie masz wskaźników na tablice. masz wskaźniki na element tablicy !!

C/C++
#include <iostream>
using namespace std;
int main()
{
    char * napis = "ala ma kota";
    cout <<*( napis + 1 ) << " to jest to samo!!! " << napis[ 1 ] << endl;
}
P-152014
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-25 21:08:16
Podsumowując, mając taką funkcję przepisująca, muszę przesyłać jako argumenty tablice?
P-152016
pekfos
» 2016-09-25 21:10:00
Na pewno nie wskaźniki bez pokrycia.
P-152017
mateczek
» 2016-09-25 21:12:05
podsumowując to  musisz zalokować pamięć! co miałeś napisane już w pierwszej odpowiedzi.(choć może nie wprost)
P-152018
Monika90
» 2016-09-25 21:14:17

tablica i wskaźnik to jest to samo!
No właśnie nie.


C/C++
char * napis = "ala ma kota";
To się nie skompiluje w C++. Kiedyś było to dopuszczalne dla kompatybilności z bardzo stary kodem. Ale teraz to jest błąd. W kompilatorze GCC można użyć opcji -Werror=write-strings i ten błędny kod przestanie się kompilować.

Musi tam być const
C/C++
const char * napis = "ala ma kota";
P-152019
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-25 21:30:08
char * napis = "ala ma kota";
Code blocks pozwala :D

Dzięki, już zrozumiałem. Wcześniej myślałem, że taki niezdefiniowany wskaźnik char*wsk wskazuje sobie na jakąś pustą tablicę w pamięcy (tzn. na jej pierwszy element). I jeszcze na koniec, powiedzcie mi tylko, czy dobrze już wszystko rozumiem ;)
C/C++
#include <iostream>
using namespace std;
int main()
{
    const char * wsk = "ala ma kota"; // definicja wskaźnika na początek pewnej tablicy
    cout << wsk << endl;
    char tab[] { "ala ma kota" };
    cout << tab << endl; // to samo co wczesniej bo to tez jest adres poczatku (nazwa tablicy jest adresem jej pierwszego elementu...)
    wsk = tab; // nadanie wskaznikowi adresu tablicy "tab"
    cout << wsk << endl; // tu tez jest adres tablicy
}
P-152020
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona