csutomi Posted August 30, 2005 Posted August 30, 2005 Nekem egy olyan kérdésem volna, hogy lehet olyat csinálni, hogy például: char proba="Hello\nvilag"; Ha ezt kiíratom valamivel, pl: MessageBox vagy printf, akkor ugyebár két sorban jelenik meg így: Hello vilag A kérdésem az lenne, hogy azt, hogy a szöveg két sorba jelenjen meg maguk a függvények végzik el, vagy pedig a fordító futtatás elõtt eleve behelyettesíti a megfelelõ karaktert a \n helyére?
Kovács Dávid ( Davs ) Posted August 30, 2005 Posted August 30, 2005 A megfelelõ karakter a \n helyére egy white space, egy szóköz
arpsoft Posted August 30, 2005 Posted August 30, 2005 Persze, ha egy sorba akarja írni. De nem ez volt a kérdés, hanem az, hogy a fordító lefordítja-e a kódba, vagy az oprendszer tudja, hogy két sor.
csutomi Posted August 31, 2005 Author Posted August 31, 2005 Pontosabban az, hogy a fordító saját magától tudja, hogy a "\n" entert jelent vagy például a printf függvényt írták meg úgy, hogy ha a stringben "\" jelet talál és "n" van utána, akkor ezeket szedje ki a stringbõl és a két karakter helyett tegye be az enter kódját. Akkor, ha jól értem arpsoft válaszát, az elõbbi verzió az igaz.
arpsoft Posted August 31, 2005 Posted August 31, 2005 Így van, iletve mindkettõ igaz. A C alapú nyelvekben (pl PHP) a \-es kódok vezérlõkarakterek. A \t például a tabulátor. Az ezeket feldolgozó függvények vannak úgy kitalálva, hogy a kiírást ennek megfelelõen formázzák, viszont ezeket a függvényeket meg a fordító (most mindegy, hogy compiler vagy interpreter) a proci számára hetõ utasításokká alakítja. Tehát, a fordító is és a függvény is benne van a dologban.
Lex Posted September 1, 2005 Posted September 1, 2005 A fordító a \n-bõl 10-es (0x0A) kódot készít, amit a printf újsorként hajt végre.
Gereby Posted September 3, 2005 Posted September 3, 2005 Sziasztok! Olyan kérdésem lenne, hogy: Suliban mostantól majd C-t fogunk tanulni... és, hogy most a PCW segítségével belekezdtem a C#-ba fölmerült bennem az, hogy nehogy összekavarjam magam. Tehát kérdésem a következõ: A síma C és a C# között mi a külömbség? Van valami átfedés, vagy netán # az egy bõvített C vagy hogy van ez? Elõrre is köszi!
csutomi Posted September 5, 2005 Author Posted September 5, 2005 Talán a legnagyobb különbség, hogy míg a C# objektum orientált, addig a C nem. Én ugyan a C#-ot nem ismerem annyira, de ha jól tudom, akkor annak is a C az alapja hasonlóan a C++-hoz. A C és a C# két különbözõ programozási nyelv.
Gereby Posted September 5, 2005 Posted September 5, 2005 Holnap lesz az elsõ órám, és akkor ott megkérdezem a tanárt. Az lesz a biztosabb. Azért köszi!
horukk Posted September 6, 2005 Posted September 6, 2005 Sziasztok. C-ben szeretném megírni a saját my_strcpy() függvényt. ( strcpy(c,"string") a függvény az elsõ paraméterként megadott tömbbe másolja a második paraméterként megadott karakterláncot) Azon a ponton elakadtam, hogy a paraméterként megadott sztringet nem tudom átadni a függvénynek. Egy darab karakter átadása megy, de string átadása nem. Kérem segítsen valaki. Köszi.
Lex Posted September 6, 2005 Posted September 6, 2005 Talán írd le ide, amit eddig csináltál, hogy ki tudjuk javítani, mert akár mi is megírhatjuk a progit (pár sor), de abból nem tanulsz. Egyébként valahol a char, char * -nál lesz a hiba (így látatlanban).
horukk Posted September 6, 2005 Posted September 6, 2005 Kösz a gyors reagálást. Elsõ nekifutásra a stringet ('52') szeretném berakni a c[] tömbbe. Nem igazán akar összejönni. Ha a paraméterként megadott string helyett változót használnék, úgy talán menne a dolog. A változónak van címe, azt át tudnám adni. De a stringnek nincs. És a feladat a string átadásról szól. #include<stdio.h> #include<conio.h> #include<string.h> char c[10]; char *sp; sp=c; //sp pointer c[0] elemére mutat. int my_strcpy(char sp){ printf("\n%c",c[0]); return 1; } int main(){ /*printf("\n%c",c[3]); *(sp+3)='5'; printf("\n%c",c[3]);*/ my_strcpy('52'); return 1; }
horukk Posted September 6, 2005 Posted September 6, 2005 Itt van a változó átadás, az mûködik. #include<stdio.h> #include<conio.h> #include<string.h> char c[3]={'A','2','3'}; char *sp; int my_strcpy(char *_e){ printf("\n%c",*_e); return 1; } int main(){ sp=c; /*printf("\n%c",c[3]); *(sp+3)='5'; printf("\n%c",c[3]);*/ my_strcpy(sp); return 1; }
Lex Posted September 6, 2005 Posted September 6, 2005 Már bocs, de itt sehol se látok string másolást. És az elõbb, még kétparaméteres fv-t írtál. Maradj az eredeti elképzelésnél. Átadsz egy stringre mutató pointert és egy konstans stringet (string literált). Ezt dolgozd fel. Ügyelj a típusokra. Tipp: stringet csak karakterenként lehet másolni!
horukk Posted September 6, 2005 Posted September 6, 2005 A feladat valóban 2 paraméteres, de elõbb a sztring átadást szeretném megérteni. Azt szeretném elérni elsõ nekifutásra, hogy pl: my_strcpy('abc') paramétere kerüljön át egy tömbbe a függvény törzsébe. Ha nem az 'abc' szrtinget szeretném átadni, hanem mondjuk egy változót, karaktertömböt, az megy. De a multi character az nem.
Lex Posted September 6, 2005 Posted September 6, 2005 Így mûködik neked? int my_strcpy(char *str){ printf("\n%c",*str); return 1; } int main(){ my_strcpy("alma"); return 1; } Milyen fejlesztõ környezetben dolgozol? Ja, bocs csak most látom: ' - aposztróf közé, csak karaktert (értsd: 1 karaktert) lehet írni. Ha string konstanst akarsz megadni, akkor "- idézõjelek közé kell tenni, mert így a stringet lezárja egy '\0' karakterrel.
horukk Posted September 6, 2005 Posted September 6, 2005 MinGW a környezet. Igen, mûködik. Így már el tudom tárolni a stringet a függvény törzsében egy tömbbe. A mutatót növelem 1-gyel. Köszönöm, nagy segítség volt.
horukk Posted September 6, 2005 Posted September 6, 2005 Csak a MinGW Developer Studio-t. Miért kéne együtt használni?
csutomi Posted September 6, 2005 Author Posted September 6, 2005 char c[3]={'A','2','3'}; @horukk: Ne haragudj a beleszólásért, csak volna két észrevételem a programoddal kapcsolatban. A fenti értékadást C-ben egyszerûbben is meg lehet tenni, így: char c[3] = "A23"; vagy így is: char c[] = "A23"; Másrészt ez azért sem célszerû megadási mód, mert a sztringet C-ben le kell zárni a '\0' karakterrel. Vagyis ha ragaszkodsz az eredeti megadási formához, amit írtál, akkor így jobb: char c[4] = {'A', '2', '3', '\0'}; A másik, hogy a main függvénynek soha ne adj 1-es visszatérési értéket, mert ez azt jelenti (elvileg), hogy a programod valamilyen hiba miatt állt le. Lást az exit(1) függvényt. A helyes érték a nulla.
Gereby Posted September 6, 2005 Posted September 6, 2005 Vao! Az elsõ C órám után értem, hogy mit magyaráztok Ez tetszik!
horukk Posted September 6, 2005 Posted September 6, 2005 Lex, frankón mûködik a my_strcpy() függvényem. Ezen felbuzdulva megcsináltam a my_strlen() függvényt is. Ezekbõl adódott egy kérdésem, ami a következõ lenne: Hogyan tudok készíteni fejlécfájlt a saját függvényekhez? Ha lenne mondjuk egy my_file.h fejlécfájlom, amiben szerepelne a fentebb említett két függvény, akkor elég lenne incude-olni, és már mûködnének is a függvényeim. Nem kellene minden programban megírni õket. Eme problémához is várom a segítõkész hozzászólásokat.
horukk Posted September 6, 2005 Posted September 6, 2005 csutomi, kösz az észrevételt, ebbõl is tanultam. Ha jól sejtem, ez csak karaktertömbnél van így, mármint az értékadás.
Lex Posted September 6, 2005 Posted September 6, 2005 string=karaktertömb char *alma="1234567890"; char alma[]="1234567890"; a két sor ekvivalens. A tömb neve, mindig egy, a tömb elemeire mutató, elem típusú,pointer. Fejlécfájlt a legegyszerûbb, de ronda módszer, ha magát a függvényt rakod bele. Ennek az a hibája, hogy egy progiban csak egyszer hívhatod be, mert kétszer nem definiálhatsz egy fv-t. A másik hiba, hogy a fordítónak mindig be kell fordítania, így nagyobb proginál sokáig tart. A szebb megoldás, hogy csak a fv. deklarációját helyezed el benne, ami a fv. elsõ sora (a fv. típusa, neve, paraméterei) és a kapcsos zárójel helyett ;-vel lezárod a deklarációt. Ekkor be #include-olhatod minden programodba, ügyelve arra, hogy az elkészült .obj tágymodulhoz hozzálinkeld a fv. lefordított tárgymodulját.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now