C++ kérdések

Kezdőlap Fórumok Programozás C++ kérdések

10 bejegyzés megtekintése - 21-30 / 120
  • Szerző
    Bejegyzés
  • #2023688
    kisbetu
    Felhasználó
      VBalint wrote:
      bocs mindenkitõl

      Semmi gond.
      Elõbb-utóbb csak kiderül, hogyan kéne szöveget beírni egy szövegdobozba.

      #2023689
      FLINX
      Felhasználó
        Code:
        #include<>
        #include
        #include
        using namespace std;

        using namespace std;
        int main()
        {
        //ret.len =l
        //ret.szam= sz

            int j,l;
            char *temp;
        char *sz;

        sz= new char[3];
        sz=”234″;

        l=strlen(sz);
        cout<

        Sziasztok!
        Azt szeretném megoldani ezzel a kódrészlettel, hogy egy számokból álló karaktertömbbe ahol az elsõ karakter ‘1’  bemásolni a végére egy másik tömböt. Példában „222”
        hogy az másolás eredménye egy „1222” tömb legyen…
        Szóval van a fenti kód( ahol az eslõ include természetsen iostream de azt valahogy nem hajlandó bevenni a fórummotor=> joo hosszu hibauzenet)
        Meg egy SUN OS 5.8 + UltraSparc+ gcc 3.4.5 trio. Ahol g++ filename parancsra le is fordul a kód de futtatáskor a for ciklusnál elszáll.: Segmentation fault.
        Ezt a kommentekben is feltüntettem.
        Sokkal egyszerûbb megoldásnak tûnne az for ciklus használata helyett az strncpy(temp,sz,l); használata, de nekem ugyanúgy Segmentation fault.
        Egyébként a M$ XP + Turion + Visual C++ 2005 express ezt simán megeszi, csak a tömbvégét telerakja szeméttel…
        Na mind1 ez annyira nem tartozik ide.
        A kérdésem az lenne, hogy hogyan tudnám a feladatot megoldani az elsõ említett összeállításban??? (strncpy mégjobb lenne)
        Segítséget elõre is köszönöm!

        #2023690
        aty
        Felhasználó

          Nekem is lefordul Linux alatt, GCC 3.4.6-al.
          De ez nekem nem stimmel:

          Code:
          sz= new char[3];
          sz=”234″;

           
          Itt létrehozol egy 3 charból álló tömböt és 4 elemet akarsz bezsúfolni erre a helyre. Ilyenkor is kell a hely a lezáró ‘’-nak szerintem.

          #2023691
          FLINX
          Felhasználó
            aty wrote:
            Nekem is lefordul Linux alatt, GCC 3.4.6-al.
            De ez nekem nem stimmel:

            Code:
            sz= new char[3];
            sz=”234″;

             
            Itt létrehozol egy 3 charból álló tömböt és 4 elemet akarsz bezsúfolni erre a helyre. Ilyenkor is kell a hely a lezáró ‘’-nak szerintem.

            Az a helyzet, hogy ebben a formában is normalisan mukodik az sz tömb… Mert kit tudod iratni, meg minden, de egyebkent ha 4 es tombot foglalok akkor sem valtozik semmi erdemi

            #2023692
            pointux
            Felhasználó

              „Segmentation fault.”
              A kétes helyekre (mögé) be kell írni egy szöveget… ha kiírja, akkor nem ott van a hiba, hanem késõbb… stb.

              „Egyébként a M$ XP + Turion + Visual C++ 2005 express ezt simán megeszi, csak a tömbvégét telerakja szeméttel… „
              Pontosan arról van szó, ha nincs hely a lezáró karakternek, akkor kiírja a „szemetet”, ami eleve ott volt.
              Ha nem engedélyezett területhez akar a program hozzáférni (mondjuk túlcsordul), akkor a rendszer nem engedi.
              Hogy miért lehetséges ez vc-vel? A válasz egyszerû: a vc egy un. „nem biztonságos” nyelv, mely megengedi azokhoz a területekhez való hozzáférést, melyekhez nem lenne szabad… A kártevõk imádják. :)))

              „Azt szeretném megoldani ezzel a kódrészlettel, hogy egy számokból álló karaktertömbbe ahol az elsõ karakter ‘1’  bemásolni a végére egy másik tömböt. Példában „222”
              hogy az másolás eredménye egy „1222” tömb legyen…”
              Erre meg nem értem, miért nem lehet könyvtári függvényt használni.

              Egyébként, ha meg c++, akkor meg lehetne stringeket, meg streameket is használni, akkor nem kell vigyázni a dinamikus méretváltoztatásra sem… egyébként malloc/realloc (persze ilyen 4 elemû tömböknél nem oszt nem szoroz a memóriapocséklás :))))…

              „Az a helyzet, hogy ebben a formában is normalisan mukodik az sz tömb… Mert kit tudod iratni, meg minden, de egyebkent ha 4 es tombot foglalok akkor sem valtozik semmi erdemi”
              Na ez az, mert nem érted… de végig sem gondolod a stringek kezelését… Hallgass aty-ra!
              Ha logikusan belegondolsz, a kiírásnál, másolásnál stb. honnan tudja a függvény, hogy vége van a stringnek??? Abból, hogy „” a vége. (Máskülönben folytatja a mûveletet: „védett” szegmensben a szegmens végéig, majd segfaultol, nem „védett” szegmensnél, meg mondjuk addig, amíg kárt okoz…)

              #2023693
              Leslieman
              Felhasználó

                Flinkx!

                Ha C++-ban szeretnél programozni, akkor illik a C++ ‘dolgait’ használni, és nem igazán illik keverni a C megoldásaival.
                Tehát olyasmire akarok kilyukadni, hogy nem ‘illik’ ‘.h’ header fájlokat használni, hanem illik az ezeknek megdfelelõ C++ header fájlokat használni. Nem illik stringek kezelésére char[] tömböket használni, hanem van erre pl. ‘rendes’ String osztály.
                http://www.msoe.edu/eecs/cese/resources/stl/string.htm

                Persze a nem illik azt jelenti, hogy simán használhatod ha éppen szükség van ezekre vagy éppen logikusabban meg lehet így oldani dolgokat, stb.
                A nagyon kezdõ programozók tipikus hibája a ‘’ lezáró karaktertömbökkel kapcsolatban :).

                #2023694
                FLINX
                Felhasználó

                  Már megoldódott…
                  Kössz mindenkinek.

                  #2023695
                  aty
                  Felhasználó
                    #2023696
                    roante
                    Felhasználó
                      vizsla wrote:
                      „Segmentation fault.”
                      A kétes helyekre (mögé) be kell írni egy szöveget… ha kiírja, akkor nem ott van a hiba, hanem késõbb… stb.

                      Hát nemtudom… A tapasztalataim azt mutatják, hogy elég nemdeterminisztikusan mûködtek a dolgok… Azaz volt, hogy a kritikus sor elõtti kiiratás volt ok, néha az utána lévõ is megjelent, vagy a 10 sorral alattuk lévõ is… Még a gdb sem adott valami normális dumpot. Mondjuk lehet, hogy azért, mert cerr helyett cout-ot használtam, az meg bufferelt, de elméletileg az endl is flush-olja a buffert, nem?

                      #2023697
                      Leslieman
                      Felhasználó
                        roante wrote:
                        elméletileg az endl is flush-olja a buffert, nem?
                        Elvileg igen.
                      10 bejegyzés megtekintése - 21-30 / 120
                      • Be kell jelentkezni a hozzászóláshoz.