- DIGI internet
- Agyi chipes gyártóba fektetett a kriptocég
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Az Apple iPadOS-t is megrendszabályozza az EU
- Milyen routert?
- Ingyenes vagy akciós szoftverek
- WLAN, WiFi, vezeték nélküli hálózat
- ASUS routerek
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- Windows 11
Új hozzászólás Aktív témák
-
Karma
félisten
válasz tototos #3810 üzenetére
Persze hogy van, csak egy kicsit el kell rugaszkodnod a struktúrától. A megoldás az ún. getter/setter függvények írása, amivel szabályozod a hozzáférést.
Röviden írnod kell olyan függvényeket, melyeknek az első paramétere egy pointer a struktúratípusodra; a getternél nincs más, a setternél meg ott az új érték másodiknak. És csak ezeket a függvényeket használod a struktúrád birizgálásához, közvetlenül nem nyúlsz bele.
C-ben ezt egyébként elég könnyen garantálni is tudod, ha a struktúrád definícióját külön .c fájlba rakod.
“All nothings are not equal.”
-
buherton
őstag
válasz tototos #3812 üzenetére
Igen. Tulajdonképpen objektum orientáltan kell programozni C-ben, és ezt valahogy így tudod megoldani, hogy kávzi a struktúra az objektum paramétere, és a get/set függvény a metódusa.
De van egymásik lehetőség is, ami C-seb. Ha függvényekkel dolgozol, akkor amikor átadod a struktúrát, akkor const-ként kell átadni, mert nem akarod, hogy változtatva legyen (pointernél olyat is lehet csinálni, hogy a stuktúra címét ne lehessen változtatni). Így, mivel konstansként akarod használni a függvényen belül, és ne talán tán megváltoztatod az egyik értéket, akkor arra a fordító hibát fog dobni.
[ Szerkesztve ]
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz tototos #3814 üzenetére
Röviden ennyi a set-get. Nem működik teljesen jól, de az elv jól látszódik. Mivel úgy írtad, hogy a sokból két változó nem változhat, így a const-os dolgot nem lehet használni, mert akkor egyik elemét sem lehet változtatni. Valamiért nem a 10-t tölti bele a változóba. Tudja esetleg valaki, hogy miért?
#include <stdlib.h>
#include <stdio.h>
typedef struct
{
int ifoo;
char cfoo;
} fooTypeDef;
void set(fooTypeDef foo)
{
foo.ifoo = 10;
}
int get(const fooTypeDef foo)
{
return foo.ifoo;
}
int main(void)
{
fooTypeDef sfoo;
set(sfoo);
printf("%i\n", get(sfoo));
return 0;
}Látom pointereket használsz. Ha azok sem változnak, akkor arra is ki lehet kötni, hogy konstans legyen.
MCU-ra vagy a PC-re írod a kódod?
Bocsi, hogy csak most válaszolok, de a munkahelyen nem szeretek 1-2 percnél többet foglalkozni a fórummal.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz tototos #3823 üzenetére
Olyat lehet csinálni, hogy senki nem írhat a struktúrába.
#include <stdlib.h>
#include <stdio.h>
typedef struct
{
int ifoo;
char cfoo;
} fooTypeDef;
int get(const fooTypeDef * const foo)
{
int i = sfoo->ifoo; //működnie kellene, ha csak ez van a függvény törzsben
sfoo->cfoo = 'd'; // erre viszont hibát kell, hogy dobjon, mert konstans változóba nem lehet írni
}
int main(void)
{
fooTypeDef sfoo;
sfoo.ifoo = 10;
sfoo.cfoo = 'a';
get(&sfoo);
return 0;
}Nincs nálam fordító, így nem tudom kirpróbálni, hogy tényleg működik-e.
Fene a jó dolgod. Szívesen foglalkoznék főállásban ilyennel, csak sajnos más fele vitt a sors. Most is körülöttem ilyennel foglalkoznak csak én más projekten vagyok.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
Karma
félisten
válasz tototos #3847 üzenetére
A válasz meg még mindig az, hogy írj egy
uint16_t signal_get_id(const signal_struct const* signal)
{
return signal->id;
}függényt a signal.c-be, és a struktúra tagdefinícióját is átrakod oda. A headerben meg csak a forward deklarációk maradnak, így ha a headert használja valaki, nem tudja még a tagok offszetjét ye, ergo nem tudja változtatni.
“All nothings are not equal.”
-
Geresics
addikt
válasz tototos #3853 üzenetére
User tölti fel, egyesével. Erre csináltam meg a beolvasás részt:
...
/* beolvasás */
printf("\nAdja meg az 5x5-os tomb elemeit! Minden elem utan usson ENTER-t!\n");
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("Soron kovetkezo elem: ");
scanf("%d", &a[i][j]);
}
}
...*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
Geresics
addikt
válasz tototos #3855 üzenetére
Istenkirály vagy!
Ez alapján kezdem kapizsgálni a lényeget, meg is csináltam gyorsan a nyomtat függvényt is!
Már csak erre a fránya oszlopcserére kell rájönnöm, és mehetek is a másik feladatra!
Tényleg, az int array[5][5] miért van? Mert az én értelmezésemben (ahogy a nyomtatban csináltam) az "a" nevű 5x5-ös mátrixra hivatkozom. Vagy rosszul értelmezek valamit?#include <stdio.h>
void beolvas(int array[5][5])
{
int i,j;
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("Soron kovetkezo elem: ");
scanf("%d", &array[i][j]);
}
}
}
void nyomtatas(int a[5][5])
{
int i, j; /* i lesz az oszlop száma */
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("\nA(z) %d oszlop %d. eleme: [%d]", i+1, j+1, a[j][i]);
}
}
}
int main()
{
int a[5][5];
int i, j; /* i lesz az oszlop száma */
int szam1, szam2, mem;
/* beolvasás */
printf("\nAdja meg az 5x5-os tomb elemeit! Minden elem utan usson ENTER-t!\n");
beolvas(a);
/* nyomtatás */
nyomtatas(a);
return 0;
}*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
Geresics
addikt
válasz tototos #3859 üzenetére
sajnos a csere nem működik. Próbafuttatáskor errorral kilép.
Megpróbáltam itt-ott átírni (pl. az általam korábban definiált változókra, stb.), de nem jutottam előrébb.
Jelenleg így fest a teljes kódom:/* Írja meg a tömb kezelő programot olyan módon,
hogy a tömb a main függvényben legyen definiálva
és minden egyéb műveletet egy külön függvény tartalmazzon.
Például a beolvasás, keresés, számítás mindegyik egy külön függvénybe kerüljön! */
/* Töltsünk fel egy 5x5-es integer mátrixot futási időben!
Ezután olvassunk be még két egész számot 0 és 4 között.
Végül a program cserélje fel a két egész számmal megadott oszlop elemeit.
Nyomtassuk ki az eredményt. */
#include <stdio.h>
#include <stdlib.h>
void beolvas(int array[5][5])
{
int i,j;
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("Soron kovetkezo elem: ");
scanf("%d", &array[i][j]);
}
}
}
void csere(int a[5][5])
{
int j; /* j a sorokat jelöli */
int szam1, szam2;
int mem=0;
for(j=0;j<5;j++)
{
mem=a[j][szam1-1];
a[j][szam1-1]=a[j][szam2-1];
a[j][szam2-1]=mem;
}
}
void nyomtatas(int a[5][5])
{
int i, j; /* i lesz az oszlop száma */
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("\nA(z) %d oszlop %d. eleme: [%d]", i+1, j+1, a[j][i]);
}
}
}
int main()
{
int a[5][5];
int i, j; /* i lesz az oszlop száma */
int szam1, szam2;
int mem=0;
/* beolvasás */
printf("\nAdja meg az 5x5-os tomb elemeit! Minden elem utan usson ENTER-t!\n");
beolvas(a);
/* két szám beolvasása */
printf("\nAdjon meg egy szamot 0 es 4 kozott: ");
scanf("%d", &szam1);
printf("Adjon meg egy masik szamot 0 es 4 kozott: ");
scanf("%d", &szam2);
/* csere */
csere(a);
/* nyomtatás */
nyomtatas(a);
return 0;
}Megpróbáltam azt is, hogy a két szám beolvasását beleraktam a "csere" függvénybe, de nem segített...
*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
Geresics
addikt
válasz tototos #3885 üzenetére
Most meg az "i"-re reklamál
Így fest jelenleg a kód, és kezdek megőrülni, mert azt írja, hogy "The variable 'i' is being used without being defined."void beolvas(char *szoveg[71])
{
printf("Adjon meg egy max. 70 karakter hosszu szoveget, majd usson ENTER-t!\n");
gets(szoveg);
}
int szamlalas()
{
char szoveg[71];
int db;
int i;
while (szoveg[i]!='\0' || szoveg[i]!='.')
{
if (szoveg[i]=' ')
db++;
i++;
}
}
int main()
{
char szoveg[71];
int db;
beolvas(szoveg);
szamlalas();
printf("A szoveg: %s", szoveg);
return 0;
}*MOTOROS CSATORNA* youtube.com/MotorosVandor
-
Bobrooney
senior tag
válasz tototos #3885 üzenetére
Függvényben a tömbök átadásánál, mindig a tömb kezdőcíme adódik át.
int szamlalas(char szoveg[], int db)
{
int i;
while (szoveg[i]!='\0' || szoveg[i]!='.')
{
if (szoveg[i]=' ')
db++;
i++;
}
}
int main()
{
char szoveg[71];
int db;
beolvas(szoveg);
szamlalas(szoveg, db);
printf("A szoveg: %s", szoveg);
return 0;
}
valahogy így kéne paraméterezni, nem futtattam le, de szerintem jó lesz![ Szerkesztve ]
-
buherton
őstag
válasz tototos #4158 üzenetére
Nézd meg a console output-ot. Ha összelinkelődött, akkor nincs para . Az Eclipse tud érdekes dolgokat művelni. Nekem tipikusan az enumokkal vannak bajai, de ettől még fordul a kód.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
dabadab
titán
válasz tototos #4233 üzenetére
mennyire jo megoldasod van?
en valami ilyesmit csinalnek:
uint16 array[4];
void insert(uint16 value, uint address)
{
uint pos;
uint shift;
pos = address >> 4;
shift = address & 0x0f;
array[pos] = value << shift;
array[++pos] = value >> ( 0x0f - shift);
}Mondjuk ezt erosen endian-fuggo, szoval inkabb at kellene irni unit8-as tombre, de a lenyeg ez, meg kinullazza a byte-ok szelet, szoval ott valami maszkolni meg orozni kell, ha ez baj.
[ Szerkesztve ]
DRM is theft
-
Jester01
veterán
-
Karma
félisten
válasz tototos #4241 üzenetére
Ha törölni akarod azt a szakaszt, akkor ÉSelned kell egy olyan számmal, ami a kívánt bitszakaszon 0, körülötte 1. Ha beállítani, akkor meg VAGYolnod kellegy olyannal, ami a szakaszon 1, mindenhol máshol 0.
Pl. 01010101 & 11100011 = 01000001,
Ill. 01010101 | 00011100 = 01011101Persze az előbbi megoldás teljesebb, mert a maszkot is megcsinálja és konkrét értéket is tud
[ Szerkesztve ]
“All nothings are not equal.”
-
buherton
őstag
válasz tototos #4245 üzenetére
Milyen mikrokontrollerről van szó? Van benne MPU? Ha nincs, akkor a malloc/free használata teljes öngyilkosság, és borítékolható a fagyás. Ha auto változóba tárolod le a stringet, akkor azt stackre rakja, ha jól rémlik.
MPU nélküli MCU-kban is lehet dinamikus memóriákat foglalni, de ahhoz neked kell a kezedbe venned a memória menedzsmentet. A mi projektünkben a kommunikációs driver pont így működik.
[ Szerkesztve ]
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz tototos #4247 üzenetére
Akkor meg van válasz a kérdésedre. A malloc/calloc/realloc/free tabu.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz tototos #4249 üzenetére
Az a baj a dinamikus memória használattal, hogy MPU nélkül nincs ki töredezettségmentesítse a memória táblát, és így előbb utóbb jön a hard fault exception, és jöhet a fej vakarás, hogy most ez mi a bánat volt, mert az RTOS-ek nem arról híresek, hogy szájbarágósan leírja, hogy mi történt (tapasztalat). Azt szokták csinálni, hogy előre lefoglalnak x memóriát, és arra írnak egy vezérlőt, ami karbantartja azt a területet, és ha kell akkor neked pointert, de ennek a technikai részletét nem ismerem. De mondom használj auto változót, vagy hát ha valaki másnak van jobb ötlete.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz tototos #4252 üzenetére
Nincs. Teljesen azonos a kettő, és mivel azonos a kettő, ezért a fordító ezt is elfogja fogadni:
free([i]tokens);
mert ezt így fogja feloldani:
free(*(i + tokens));
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
dabadab
titán
-
dabadab
titán
-
Jester01
veterán
válasz tototos #4671 üzenetére
De, oda lehetne:
gcm_zeroes = kzalloc(16, GFP_KERNEL);
if (!gcm_zeroes) return -ENOMEM;
err = crypto_register_template(&crypto_gcm_base_tmpl);
if (err)
{
kfree(gcm_zeroes);
return err;
}
err = crypto_register_template(&crypto_gcm_tmpl);
if (err)
{
crypto_unregister_template(&crypto_gcm_base_tmpl);
kfree(gcm_zeroes);
return err;
}
err = crypto_register_template(&crypto_rfc4106_tmpl);
if (err)
{
crypto_unregister_template(&crypto_gcm_tmpl);
crypto_unregister_template(&crypto_gcm_base_tmpl);
kfree(gcm_zeroes);
return err;
}
err = crypto_register_template(&crypto_rfc4543_tmpl);
if (err)
{
crypto_unregister_template(&crypto_rfc4106_tmpl);
crypto_unregister_template(&crypto_gcm_tmpl);
crypto_unregister_template(&crypto_gcm_base_tmpl);
kfree(gcm_zeroes);
return err;
}
return 0;Jester
-
dabadab
titán
válasz tototos #4687 üzenetére
sec += 2;
sec %= 60;Mondjuk a "while(act_sec<wait)" az problemas lesz tulcsordulaskor.
De mondjuk olyan fuggveny nincs, ami eleve masodpercben (msec-ben, usec-ben) adja vissza az idot?
(#4685) don_peter: "PHP-és vagyok, de ott sokkal egyszerűbbek voltak a dolgok."
Egyszerubbek semmikeppen nem voltak, csak valoszinuleg nem csinaltal semmi olyat, ahol kellett volna tudnod, hogy a konkret bitek szintjen mi is tortenik.
[ Szerkesztve ]
DRM is theft
-
Jester01
veterán
válasz tototos #4687 üzenetére
Általános esetben inkább kivonás mint maszkolás mert ez utóbbi nem mindig jó.
Amúgy osztási maradékot lehet még használni, de az sokkal lassabb szokott lenni.Egyébként 62 sosem lesz, hiszen maximum 59+2=61 lehet.
A while(act_sec<wait) viszont rossz, hiszen ha az act_sec 59 akkor a wait 1 lesz és bele sem megy a ciklusba.
Ami még probléma lehet, hogy esetleg éppen az aktuális másodperc végén jársz és így akár közel 1 másodpercre is zsugorodhat a várakozási idő.
Jester
-
DrojDtroll
addikt
válasz tototos #5009 üzenetére
A struktura nélküli, több tömbös, megoldás sokkal nehézkesebb?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define foglalasok_max_szama 100
#define cegnev_max_hossza 100
void foglalas();
void kiiras();
void kilep();
char ch, cegnev[foglalasok_max_szama][cegnev_max_hossza];
int ev[foglalasok_max_szama], honap[foglalasok_max_szama], nap[foglalasok_max_szama], kezdo_ora[foglalasok_max_szama], zaro_ora[foglalasok_max_szama];
int ossz_foglalas_szama=0, i;
int main()
{
int lehetoseg;
do{
printf("1\tUj foglalas\n");
printf("2\tMeglevok kiirasa\n");
printf("3\tKilepes\n");
scanf("%d", &lehetoseg);
if(lehetoseg==1){
foglalas();
}
if(lehetoseg==2){
kiiras();
}
}while(lehetoseg!=3);
kilep();
return 0;
}
void foglalas(){
printf("Uj foglalas\n");
}
void kiiras(){
printf("Eddigi foglalasok kiirasa\n");
}
void kilep(){
printf("A kilepeshez nyomja meg az Enter billentyut!\n");
getch(ch);
}Eddig ennyit írtam meg belőle, de nem hiszem hogy többhöz kedvem lesz már ma este.
Ez rossz irány, és elgondolás?
Ezeket azért kérdem, mert én is még csak most tanulok, és szerintem tudni, mit hogy lehet a legjobban megvalósítani.
[ Szerkesztve ]
-
-
CPT.Pirk
Jómunkásember
válasz tototos #5097 üzenetére
EM783-as prociról van szó, ami kb. az nxp 11-es szériás procijainak felel meg, kiegészítve a mérő résszel. Mi is próbáltuk az expresso-t, de nem találtuk meg benne ezt a procit, pedig 2012 decembere óta támogatja. Egyébként java részt nuvotonban nyomulunk, coocox alatt.
Szóval azt mondod, hogy feltétlen lib-el kell kezdődjön a lib? Kíváncsi leszek rá mire jutunk hétfőn ezzel.
buherton: sajnos nem Linux alatt dolgozunk, de a coocoxnak nincs is Linuxos verziója, hiába Eclipse alapú. A linkernél -DEM783.lib lesz a paraméter, amit átad a környezet. Próbáltuk megadni neki a teljes utat kézzel is több módon, de minden esetben az volt, hogy nem találja.
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Fűnyíró topik
- Építő/felújító topik
- exHWSW - Értünk mindenhez IS
- Motoros topic
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Gaming notebook topik
- sziku69: Fűzzük össze a szavakat :)
- Milyen TV-t vegyek?
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- Kerékpárosok, bringások ide!
- További aktív témák...