Article View: pl.comp.lang.c
Article #586Re: Lvalue required
From: Tomasz Wysocki
Date: Thu, 22 Jan 1998 18:20
Date: Thu, 22 Jan 1998 18:20
51 lines
2273 bytes
2273 bytes
Pawel Matejski wrote:
>
> Jarek Kucypera <jark@insert.com.pl> wrote:
> > Tomasz Cichacki <hermes@venus.wmid.edu.pl> napisa?(a) w artykule
>
> >> Gdzie jest blad?
>
> >> typedef struct dane
> >> {
> >> char ind[5];
> >> char imie[20];
> >> };
> >> dane d1;
> >>
> >> //***************************
> >> // zapis danych do pliku
> >> //***************************
> >>
> >> void main(void)
> >> {
> >> char x[5] = "abcd"; // - Lvalue required
> >> d1.ind = x;
> >> };
>
> > B??d w tym, ?e w C(++) NIE MO?NA stosowa? operatora podstawienia "=" do
>
> [Ciach]
>
> > Postawienie, jak u Ciebie, po prawej stronie operatora "=" tablicy,
> > powoduje przekazanie ADRESU PIERWSZEGO ELEMENTU tej tablicy,
> > a wi?c w tym wypadku wska?nika typu (char *).
>
> To wkoncu to jest blad, czy nie? Przeczysz sam sobie.
>
> Bledu w kompilacji tego fragmentu nie ma (kompilowane przez gcc),
> za to konstrukcja, d1.ind = x; jest niebezpiczna, gdyz w tym
> momencie gubisz wskaznik do zarezerwowanego miejsca w pamieci.
> Postepujac tak czesciej w programie, moze Ci zabrakonac pamieci.
Pamieci nie zabraknie.
d1.ind jest typu char [5] a nie char * a zatem wskaznika nie gubimy.
Sprawdz rozmiar struktury d1. ( u mnie 25*sizeof(char) )
Mimo ze nazwe tablicy mozna rozumiec jako wskaznik do jej pierwszego
elementu to w C++ sa to dwa rozne typy.
Tyle ze kompilator wykonuje niejawny type-cast do char *.
Pod GCC sie kompiluje. Tylko ze to jest dobry kompilator i wie ze chodzi
nam o przepisanie tablic.
Aczkolwiek ANSI C++ zabrania przepisywania tablic.
( Sprawdzcie z opcja -Wall )
tawek@friko2.onet.pl
Technical Details
Message-ID:
<34C78DFE.95DF29AA@friko2.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.tpnet.pl!ppp-cen138.lodz.tpnet.plReferences:
<690be3$rs8$3@sunsite.icm.edu.pl> <01bd1c42$76482220$2701070a@jark.insert.igo.wroc.pl> <6a2al7$n18$1@fox.ds14.agh.edu.pl>Show Full Headers
Complete Article Headers
Message-ID: <34C78DFE.95DF29AA@friko2.onet.pl> Date: Thu, 22 Jan 1998 19:20:46 +0100 From: Tomasz Wysocki <tawek@friko2.onet.pl> X-Mailer: Mozilla 4.03 [en] (Win95; I) MIME-Version: 1.0 Newsgroups: pl.comp.lang.c Subject: Re: Lvalue required References: <690be3$rs8$3@sunsite.icm.edu.pl> <01bd1c42$76482220$2701070a@jark.insert.igo.wroc.pl> <6a2al7$n18$1@fox.ds14.agh.edu.pl> NNTP-Posting-Host: ppp-cen138.lodz.tpnet.pl Lines: 51 Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.tpnet.pl!ppp-cen138.lodz.tpnet.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit