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ść
latajacaryba
Temat założony przez niniejszego użytkownika
Program kopiujący C-string z tablicy do innej tablicy.
» 2016-09-25 18:16:25
Witam. Program ma robić to co w temacie. Nie wiem co tu jest źle, program wywala błąd po włączeniu (włączeniu, nie przy kompilacji!)
C/C++
#include <iostream>
using namespace std;
char * przepisz( const char * tekst, char * cel );

int main()
{
    const char * tekst = "Tutaj jest tekst i bedzie przepisywany";
    char * cel;
    cout << przepisz( tekst, cel );
}
char * przepisz( const char * tekst, char * cel )
{
    char * wynik = cel;
    while(( *( cel++ ) = *( tekst++ ) ) );
   
    return wynik;
}
P-152000
pekfos
» 2016-09-25 18:30:05
wywala błąd po włączeniu (włączeniu, nie przy kompilacji!)
Takie to dziwne..?

C/C++
char * cel;
Ile masz tam miejsca, tak z ciekawości?
P-152001
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-25 18:34:20
"wywala błąd po włączeniu (włączeniu, nie przy kompilacji!) Takie to dziwne..?"
chodziło mi o to, żeby zaznaczyć, że to nie błąd np. brak średnika itd.
 "char * cel; Ile masz tam miejsca, tak z ciekawości?"
to znaczy? Wszystko jest w kodzie, tablica na którą wskazuje cel nie była definiowana, nic tam nie wstawiałem.
P-152002
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-25 19:03:03
Już chyba wiem co było źle. Nie można robić tak:
char * wsk="abc";
char * wsk2="def";
*wsk=*wsk2;
tylko właściwie czemu nie?
PS. ale można tak:  while((*(cel++) = *(tekst++)));
Nie rozumiem tego.
P-152004
1aam2am1
» 2016-09-25 19:26:32
latajacaryba char* to wskaźnik na miejsce położenia pierwszej litery, więc
*wsk=*wsk2
powoduję że tylko pierwsza litera się przepisze, nie całość. Natomiast:
while((*(cel++) = *(tekst++)));
powoduje przepisanie wszystkich liter dopóki wartość *tekst nie wyniesie wartości zerowej czyli aż do końca stringa.

Ps.
cel powinien wskazywać na za alokowaną pamięć o wystarczającej długości.
P-152006
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-25 19:33:16
1aam2am1
Ale kiedy napisze się tak:
char * wks="abc";
char * wsk2="def";
*wsk=*wsk2;
to błąd krytyczny.
P-152007
1aam2am1
» 2016-09-25 19:49:29
Powinien wyświetlić ci się przy kompilowaniu błąd gdyż "abc" jest typu const char* czyli niewolno zmieniać zawartości.
wsk nie wskazuje na pamięć którą można zmieniać. Wskazuje na pamięć stałą.
Należało by zrobić tak:
C/C++
const char * wsk2 = "bcd";

char * cel;
cel =( char * ) malloc( strlen( wsk2 ) );

{
    char * cel2 = cel;
    const char * wsk3 = wsk2;
    while( *( cel2++ ) = *( wsk3++ ) );
   
}

printf( "%s", cel );

free( cel );
P-152010
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-25 20:02:10
no właśnie nie bardzo. Napisałem char BEZ const, więc nie jest stały.
P-152011
« 1 » 2 3
  Strona 1 z 3 Następna strona