CHAR – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

CHAR – C / C++ – Fórum – Programujte.comCHAR – C / C++ – Fórum – Programujte.com

 

Jeyekomon0
Stálý člen
1. 11. 2007   #1
-
0
-

Zdravim, resim takovou celkem zacatecnickou otazku:
Docetl sem se, ze do promenne "prom"
char prom[10];
muzu ukladat maximalne 10 znaku.
Ja jsem to ale zkousel "pretizit" a program mi fungoval i kdyz jsem do "prom" vlozil 12, 15 i vice znaku..
Samozrejme to nefungovalo do nekonecna, jen me zajima, kde je ta skutecna hranice a proc vlastne existuje takove volne misto..
A predpokladam, ze i kdyz to jde, tak to neni dobre, vkladat vice znaku, nez je limit, ze ..
Dik.

Nahlásit jako SPAM
IP: 195.113.33.–
jjk
mephi0
Expert
1. 11. 2007   #2
-
0
-

ne neni to dobre. Jediná chyba je v tom, že si to nekontroluje, kde zapisuje.
skus:

char pole1[10];

char pole2[200];
for (int i = 0;i < 20;i++)
pole1[i] = char(65+i);
cout << pole1 << endl;
cout << pole2 << endl;


neskušal som to, napište niekto čo to robi :)

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
kaktus0
Newbie
1. 11. 2007   #3
-
0
-

Vypíše to písmena A-T a 2 volné řádky.

Nahlásit jako SPAM
IP: 84.42.131.–
Jeyekomon0
Stálý člen
1. 11. 2007   #4
-
0
-

To mephi :
Nejdrive mi to vyhodilo 4 chyby, tak jsem to spustil znovu, zase je to vyhodilo a kdyz jsem to spustil potreti (beze zmen), tak mi to jelo bez problemu..
Cely program vypadal takhle:



#include <iostream>
using namespace std;
int main()
{
char pole1[10];

char pole2[200];

for (int i = 0;i < 20;i++)

pole1[i] = char(65+i);

cout << pole1 << endl;

cout << pole2 << endl;

cout <<"Funguje. ";
cin.get();
return 0;
}


Vypise to "ABCDEFGHIJKLMNOPQRST", pak smajlik, pak hromadu stejnych znaku (snad ╠) a pak zase "ABCDEFGHIJKLMNOPQRST", a smajlik, takze se tvari, ze s tim nema problemy.. Nevim, nechapu.

Nahlásit jako SPAM
IP: 195.113.33.–
jjk
Jeyekomon0
Stálý člen
1. 11. 2007   #5
-
0
-

To Jeyekomon :
BTW.: Ten znak mel byt ALT + 204 ..

Nahlásit jako SPAM
IP: 195.113.33.–
jjk
bukaj0
Věrný člen
1. 11. 2007   #6
-
0
-

Jeyekomon
Docetl sem se, ze do promenne "prom" char prom[10]; muzu ukladat maximalne 10 znaku.
Správně

Ja jsem to ale zkousel "pretizit" a program mi fungoval i kdyz jsem do "prom" vlozil 12, 15 i vice znaku..
Musíš si vzít, že paměť se přiděluje po úsecích. Tvoje char prom[10] potřebuje místo 80bitů. Ale jelikož počítač pracuje v dvojkové soustavě, nejbližší mocnina dvojky, do které se 80 vejde, je 128. Kernel navíc, aby se nemusel pořád hrabat v paměti, přideluje místo po větších úsecích. Nakonec tedy dostaneš mnohem větší místo než potřebuješ.

Ale pozor. Mezi kernelem většinou ještě bývá další vrstva, která se stará o spolupráci tvého programu tvého programu s kernelem. Která si může požádat o místo do zásoby, přičemž ti ho pak přiděluje sama. Takže když se budeš pokoušet takhle zapisovat do paměti, můžeš si přepsat vlastní data.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
tmi0
Věrný člen
1. 11. 2007   #7
-
0
-

... tohle neni prilis chytre. kdyz v c/c++ ukladas do pole, vezme se adresa prvniho prvku, ke ktere se pricte index: tzn. je-li c[0] na adrese 0xaaaaaa, a jeden prvek c ma jeden byte, pak c[2] bude na adrese 0xaaaaac. jde o to ze kompilator obecne predpoklada ze vis co delas. on nema proste v pameti napsano: tohle je pole c, tohle je promenna a... pri vytvoreni int c[10] ti zaruci ze bude k dispozici 10 intu na souvislych pozicich pocinaje c[0]. to co je v pameti za polem uz neresi. muze tam byt volna pamet, muze tam byt pamet kterou nikdo nevyuziva. proto ti ten program nekdy spadl (tvuj OS ho odstrelil za pokus o pristup na chranenou pamet), nekdy fungoval... a vypisoval "divne znaky" - to byly hodnoty ktere v pameti byly predtim a pocitaci prislo zbytecne je vymazat. c je jazyk kde muzes delat co chces, neni to pascal kterej ti nic nedovoli... to ze muzes delat co chces znamena ze pokud nevis co delas muze se stat cokoli... nastesti i windows pokrocil a nemuze se ti stat (vetsinou) ze si shodis celej os i takhle trivialnim programkem.
kdyz si v priklade deklaroval dve pole, je celkem caste ze se pamet pro ne alokuje po sobe... proto kdyz pises jakoby do prvniho pole, pises ve skutecnosti do druheho... ale tohohle se v programovani vyvaruj, je to podobna prasarna jako prepisovat hodnoty konstant po jejich inicializaci (ano, jde to, ale aspon si tim neshodis program))

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
1. 11. 2007   #8
-
0
-

nastesti i windows pokrocil a nemuze se ti stat (vetsinou) ze si shodis celej os i takhle trivialnim programkem.


To sa nemoze stat v ziadnom os ktory pracuje v protected rezime a pouziva virtualnu pamat (cize vsetky dnesne os). Nestras tu ludi ;)

Ak tu uz niekto povedal, sem-tam ti to funguje lebo pamat sa alokuje po strankach (4kB pod linuxom sa mi zda, pod Win nemam sajnu). To ze sa ti k tomu popriraduju premenne ktore mozes potom od-free()-ovat je vec kompileru a memory manageru, ktory je sucast clib.
Ak je to staticke, tak v binarke su sekcie(data, bss, text) tiez zarovnane na stranky.

Nahlásit jako SPAM
IP: 195.91.54.–
tmi0
Věrný člen
1. 11. 2007   #9
-
0
-

co ja vim, treba jeste pouziva win98 a dos... (ja osobne ho jeste na jednom compu mam)) je my sympatictejsi nez winXP, a je s nim vic srandy)

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Jeyekomon0
Stálý člen
2. 11. 2007   #10
-
0
-

To tmi :
Dik.
jj, pouzivam Win98, protoze soucasny vyvoj windows smeruje k tomu, ze bude nakonec uzivatel naprosto bezmocny a pocitac bude ovladat uzivatele, ale to uz patri spise do jineho fora..
Jeste jednou dik.

Nahlásit jako SPAM
IP: 195.113.31.–
jjk
tmi0
Věrný člen
2. 11. 2007   #11
-
0
-

To Anonymní uživatel : tak vidite)
To Jeyekomon : dobre rozhodnuti! zkousel si i nejaky unixovy system?)

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Jeyekomon0
Stálý člen
3. 11. 2007   #12
-
0
-

To tmi :
Zatim ne, na kazdem rohu jsou totiz reklamy na novy Windows, ale nezasveceny uzivatel se toho moc o jinych systemech (Unix, Linux) moc nedovi.
Pokud bych vedel, kde se o tom dovedet vic, tak bych mozna mel zajem.

Nahlásit jako SPAM
IP: 195.113.65.–
jjk
k
~ Anonymní uživatel
144 příspěvků
3. 11. 2007   #13
-
0
-

To tmi : Win98 je sice iba graficky dos ale aby si takto primitivny program prepisoval pamat v kernel-space je silna kava aj na produkty Mrkvosoftu, imho ;) Ale mozno ich precenujem... ;)

To Jeyekomon : linuxos.sk, root.cz, linuxsoft.cz, http://www.linux.org/lessons/ (anglicky). Len, prosim ta, neskonci pri *ubuntu.

Nahlásit jako SPAM
IP: 195.91.54.–
tmi0
Věrný člen
3. 11. 2007   #14
-
0
-

To k : no jo no)
To Jeyekomon : ... abclinuxu.cz... tady na programujte.com o linuxu moc veci neni, snad jen neco na foru (ale nevim, neprocital sem ho)

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
mephi0
Expert
4. 11. 2007   #15
-
0
-

jo tak blbosť :( niekde som čital, škoda že to nemôžem najsť. Predpokladal som zapisovanie do poľa 2 vďaka pretečeniu toho prvého.

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
tmi0
Věrný člen
4. 11. 2007   #16
-
0
-

no pokud jsou v pameti za sebou tak do nej skutecne zapise. ale vedet to nemuzes...

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 18 hostů

Podobná vlákna

C++ char — založil 3ker

Char vo for — založil Rastislav Cupa

Funkce char — založil Fičak

Strig to Char? — založil exim

Const char v C — založil Halancik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý