Hollosi Information eXchange /HIX/
HIX CODER 1052
Copyright (C) HIX
2001-01-05
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Perl (mind)  38 sor     (cikkei)
2 re:Borland C++ pointer windows alatt (mind)  44 sor     (cikkei)
3 Re: Borland C++ pointer windows alatt (mind)  21 sor     (cikkei)
4 Borland C++ pointer windows alatt (mind)  83 sor     (cikkei)
5 re: Borland C++ pointer windows alatt (mind)  34 sor     (cikkei)
6 Re: *** HIX CODER *** #1051 (mind)  42 sor     (cikkei)
7 help (mind)  7 sor     (cikkei)

+ - Perl (mind) VÁLASZ  Feladó: (cikkei)

Hi all!

Van egy kis probelmam.
Perlben szeretnem kiszedni a szerveren levo mailbox tartalmat. Eloszor
csak a fejleceket, majd a tobbit. A lenyeg, hogy elkuldom a parancsot,
amivel kiszedi egy level fejlecet, ezt beleteszem egy sima valtozoba.
Es itt van a problema: mivel ez egy for ciklus, egymas utan beolvasok
tegyuk fel 3 level fejlecet. A harmadik fejlecet nem olvassa be
rendesen, vagy nem irja ki, csak kb. felet. mindenkepp lemarad valami.
De ha beolvasok 4 fejlecet, akkor a harmadik mar teljes egeszeben
benne van. Ellenben a 4-bol hianyzik valami. Ez eleg furcsa, hisz egy
for ciklus van, hogyhogy az elso 3-at beolvassa, a 4-ediket meg nem? A
POP3 szerver tuttira jol ad vissza mindent, azzal nincs gond.

Masik gond, egy fejlecen belul:
az egesz fejlec egy $header valtozoban van. Tehat van benne ujsor
karakter is. Mikor siman print-el kiiratom a $header-t, kiirja a
sorokat, de van mikor egy sor kozepetol uj sorba kezdi, ezt nem ertem.
Pl:

>>>
To: "Gergely
 Imre" >
Subject: RE: Hmm...
Date: Mon, 9 Oct 2000 06:52:00 +0200
>>>

Itt a To mezoben biztos nincs semmi ujsor karakter a Gergely es Imre
szavak kozott, miert kezdi ujsorban??

Nem tudom, eleg vilagos voltam-e?
Pliiz maganba is, mert nem vagyok a listan.
Thanx

-- 
GImre
-> ICQ# 86297366
-> www.nextra.ro/~gimre
+ - re:Borland C++ pointer windows alatt (mind) VÁLASZ  Feladó: (cikkei)

Hali!

Nehany el nem hanyagolhato sulyos hibat vetettel aminek nem sok koze
van a Windows-hoz. A bekuldott programodban egy C++-os elem sincs. A
program mezei C-forditoval is legalabb 5-figyelmeztetest kuld.
C++-alatt le sem fordul.

1. az "int" merete gepfuggo, de semmikeppen nem keverendo a "char"-ral
a "char1"-nel. Most C-alatt az int tombbe befer a 8-karakteres szoveg,
de nem tekintheto jo megoldasnak.
2. a "*pt" valoszinoleg szinten "char *" akart lenni.
3. a "char1[8]" figyelembe veve, hogy o nem "int" rovidre van felveve,
mert az "strcpy"-nel hasznal szoveg szarokarakteret is figylembe kell
venni.
4. az strcpy egyik parametere sem lehet "int*", mindketto "char*",
tehat a C++ fordito nem futhatott le. A C-fordito is csak
figyelmeztetessel.
5. a "pt = &char1" pedig "&" irando.
6. a "printf"-ben pedig tobb egymasnak ellentmondo parametert irtal
le. Ha karakterenkent kell kiirni, akkor a "10s" mi? Ha pedig "10s"
akkor mi a "*pt" amit ugye "int*"-kent deklaraltal?
7. a ciklus zarofeltetele ertekadas "i = 7" ami jelen esetben
ertelmetlen, vegtelen ciklust okoz. Jobb lenne "char1[i]", vagy "i <
8"

main(){
  char char1[9], *pt;
  int i;
  strcpy(char1, "computer");
  pt = char1; // bar felesleges, mert char1-bol is ki lehet irni
  for (i=0;pt[i];i++)
    printf("%c", pt[i]);
}



>main()
>{
>int char1[8],*pt,i;
>strcpy(char1,"computer");
>   pt = &char1;
>   for (i = 0; i = 7; i++)
>       printf("%10s",*pt);
>}
+ - Re: Borland C++ pointer windows alatt (mind) VÁLASZ  Feladó: (cikkei)

>
>main()
>{
>int char1[8],*pt,i;
>strcpy(char1,"computer");
>   pt = &char1;
>   for (i = 0; i = 7; i++)
>       printf("%10s",*pt);
>}

Hali!

Szerinte a 'printf' fuggveny parametereben a '*pt' a nem jo, a
'printf' fuggveny a parametereben egy mutatot var, igy pedig azt az
erteket adod at mutatokent ami a 'pt' pointer altal mutatott teruleten
van, ami meg tobb mint valoszinu hogy illetektelen teruletre mutat,
tehat access viola ....

szerintem igy ird: printf("%10s", pt);

Doma
+ - Borland C++ pointer windows alatt (mind) VÁLASZ  Feladó: (cikkei)

> a feladat:
> Definialj egy tombot es hasznalt az strcpy-t, ahhoz, hogy
> hozzarendelj egy stringet. Irasd ki a stringet a kepernyore ugy,
> hogy egyszerre csak egy karaktert irjon ki. (by using a loop of
> course) Szoval ciklussal kell megoldani. (use pointer for the loop)
> Szoval hasznaljak pointert hozza...
> Inicializald a pointert az elso elemhez es hasznald a dupla plusz
> jelet (++), hogy noveld a pointert. Hasznalj _kulon_ integer
> valtozot a kiirando karakterek szamolasahoz.
> 
> main()
> {
> int char1[8],*pt,i;
> strcpy(char1,"computer");
>    pt = &char1;
>    for (i = 0; i = 7; i++)
>        printf("%10s",*pt);
> }
> 
> Ez igy tuti rossz (nem azt csinalna amit kene)

Hello Tamas!

(Elso: nem ismerem a borland 5.5-ot, de remelem jo van bealitva hogy
"console" programmont keszit windows ala)

Van egy par problema, vegyuk egyenkent:
1. char1[8], 8 int hosszu tomb, es strcpy-zol bele "computer"-t. A
"computer" be 8 betu van (a null vegzo NELKUL) igy teli teszi a
tombot, es utana a 9-ik tomb helyre tesz egy 0-at (mi eppen a *pt).

2. Ez magaba meg nem baj, mert a *pt van utana a stacken, amit atirsz
a tomb cimevel.
A nagyobb baj hogy a char1-nek utana nincs 0 vegzoje.

>    for (i = 0; i = 7; i++)
3. Ez a hiba nagyon gyakran tortenik kezdokkel (neha meg nem kezdokkel
is ;)) az osszehasonlitas (==) helyett = van, es mivel i = 7 mindig
"TRUE", igy a ciklus soha nem fejezodik be....
   
4. Meg ha ezeket kijavitod akkor se jo, mivel feladat leirasa utan
betunkent kene kiirni...

Ki lehet javitani:
main()
{
        int char1[9],*pt,i;
        strcpy(char1,"computer");
        pt = char1;
        for (i = 0; i >= 8; i++)
                printf("%c",*pt++);
}

De jobb ha megtanulod hogy "vedekezve" programmozzal, jobb ellenorzni
dolgokat....
en valahogy igy irnam en (a feladat utasitasai szerint):

#define MAXLEN 32

void main(int argc, char *argv[])
{
   const char string[] = "computer";
   char char1[MAXLEN+1];
   char *pt = char1;
   int i = strlen(string);

   if (i > MAXLEN)                              
   {
      printf("String too long\n");
      exit(-1);
   }

   strcpy(char1, string);

   for (; i; i--)
      printf("%c", *pt++);
}
   
Igy eltunnek a "magic" szamok, es a strcpy nem tud "ramaszni" a tobbi
valtozora.

Sincerely, 
Attila Voros, Chief Engineer, ISDgames
+ - re: Borland C++ pointer windows alatt (mind) VÁLASZ  Feladó: (cikkei)

Na, most itt a rossz progi:

main()
{
int char1[8],*pt,i;
strcpy(char1,"computer");   //char1 -nek char* nak kene felvenned, 
                            //ha strignet akarsz benne tartani (ez
                            //nem hiba, de attekinthetobb aprogram)
                            //ha char* char1 akkor char1[9] -nek
                            //kene lenni mert a "computer" vegen
                            //van egy 0 ertek is -is

   pt = &char1;             //neked nem a char1 -cimere van
                            //szukseged hanem a char1-ben tarolt
                            //ertekre, ami a "computer" stringre
                            //mutat

   for (i = 0; i = 7; i++)
       printf("%10s",*pt);  //neked itt nem stringet kene kiirnod               
                            //hanem char-t...
                            //es nem novelted a pt -valtozot...
}


alabbiakban leirom a programod javitott valtozatat:
main()
{
int i;
char char1[8+1],*pt;
    strcpy(char1,"computer");
    pt=char1;
    for(i=0; i<=7; i++)
        printf("%c",*pt++);
}
+ - Re: *** HIX CODER *** #1051 (mind) VÁLASZ  Feladó: (cikkei)

Hello ,

main()
{
int char1[8],*pt,i;
// ez int tipusu tomb es pointer
// elemek merete gepiszo pl : 2|4 byte

strcpy(char1,"computer");
// elemek egysege 1 byte
// es zaro 0karaktert hova tenne?

   pt = &char1;
// int* = int* = ez jo

   for (i = 0; i = 7; i++)
       printf("%10s",*pt);
// ha jo lenne 10x ki irna egymas moge a stringet
// a printf("%s", char* ) var egy char*-ot
// es addig ir ki amig egy '\0' nem talal


***********************************************
             probald ki ezt
***********************************************

main()
{

   char *pt, tomb[9] ;

   pt = (char *)strcpy( tomb, "computer" );

   while( *(pt) ) {
       putchar( *(pt++) );
   }
}


-- 
Csasz from
 hormoSapiens                            mailto:
+ - help (mind) VÁLASZ  Feladó: (cikkei)

Hi Coders!

Tud valaki Visual Basic, Visual C++ ill. Delphi levlistat vagy ami
programozassal foglalkozik, a HIX Coderen kivul (lehet angol nyelvu
is.)

            HeCtor

AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS