🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #586

Re: Lvalue required

#586
From: Tomasz Wysocki
Date: Thu, 22 Jan 1998 18:20
51 lines
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.pl
References: <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