Hirdetés
Új hozzászólás Aktív témák
-
G.A.
aktív tag
válasz buherton #5850 üzenetére
Köszönöm a gyors választ.
dns_answer local_answer -> ez nincs használva.
dns_response -> nincs deklarálva.
local_dns_resp -> nincs deklarálva.
...
dns_answer** answer -> ezt nem használod semmire.A problémás kódrészt próbáltam leegyszerűsítve a hozzászólásba beírni, közben sikerült nekem is belezavarodnom és elírnom.
dns_answer local_answer = local_dns_resp
dns_answer** answer = *dns_responseu8b data[] -> ez nagyon csúnya.
Mitől csúnya? Inkább u8b* data legyen? Még előnybe részesítem a tömböket a pointerekkel szemben, mivel azokat könnyebben kezelem. 8bites uC-n is könnyebben nyomon tudom követni, hogy mennyi RAM-ot is használok...A struct-hoz erősen javaslok egy packed attribute-omot.
Hobbi programozóként nem tudom mit jelent... mire használható.Minek union?
Megint uC-re hivatkozok. Anno #define-t használtam egy tömb változóinak az azonosításához. Ezt cseréltem le unionba ágyazott struktúrákkal. Így értem:typedef union udpv4_header
{
struct
{
my_16b src_port;
my_16b dst_port;
my_16b length;
my_16b checksum;
};
u8b b[8];
}udpv4_header;
A struktúrát használom egy konkrét változó módosításához, majd ha másolom/küldöm az adatcsomagot akkor a b[]-t használom.miért is nem memcpy-k?
Szintén egy hiányosságom. Még nem tanultam meg a használatát...Közben szerintem meglett a megoldás(működik). Ez lett a function() módosított kódja:
void get_data_from_dns_reply(u8b* data, dns_header* dns_resp_header, dns_answer*& dns_response)
{
u8b i = 0;
for (; i < 12; i++)
{
dns_resp_header->b[i] = data[i];
}
dns_response = (dns_answer*)malloc(htons(dns_resp_header->answer_rrs.i) * sizeof(dns_answer));
for(; data[i] != 0; i++)
{
i += data[i];
}
i += 5;
for(u16b j = 0; j < htons(dns_resp_header->answer_rrs.i); j++)
{
i += 12;
for (u8b x = 0; x < 4; x++, i++)
{
dns_response[j].data.b[x] = data[i];
}
}
} -
buherton
őstag
Nekem eddig egyszer sikerült két csillagos pointert leírnom a saját kódban, mert azzal volt a leghatékonyabb. Különben mindig kerülöm a használatát, mert az ember gyorsan bele tud zavarodni. Ezt javaslom neked is. A Linux függvényei közül is eddig csak eggyel találkoztam, amit két csillagot várt: scandir
u8b data[] -> ez nagyon csúnya.
Mitől csúnya? Inkább u8b* data legyen? Még előnybe részesítem a tömböket a pointerekkel szemben, mivel azokat könnyebben kezelem. 8bites uC-n is könnyebben nyomon tudom követni, hogy mennyi RAM-ot is használok...u8b data[] -> ezzel fölöslegesen foglalsz 512 bájtot a stacken, ami ugye még processzor idő is. Használj pointert. (Egy ilyen miatt én simán buktatnék egyetemen.)
A fordítótól függ, hogy hogyan align-olja a structúra változóit. Bár ez 8 bites, így nem valószínű, hogy máshogy align-olna, de a hordozhatóságot javítja.
, majd ha másolom/küldöm az adatcsomagot akkor a b[]-t használom.
Másolás ->memcpy, küldés bájtonként pedig char*-al tudsz küldeni. Ergo nem kell a union. Nem is értettem az elején, hogy miért is kellett.
dns_answer*& dns_response
Szerintem így sokkal olvashatóbb és nem utolsó sorban sokkal helytakarékosabb és gyorsabb.
void get_data_from_dns_reply(u8b* data, dns_header* dns_resp_header, dns_answer*& dns_response)
{
memcpy(dns_resp_header, data, 12);
dns_response = (dns_answer*)malloc(htons(dns_resp_header->answer_rrs.i) * sizeof(dns_answer));
for(; data[i] != 0; i++)
{
i += data[i];
}
i += 5;
for(u16b j = 0; j < htons(dns_resp_header->answer_rrs.i); j++)
{
i += 12;
memcpy(dns_response[j].data, &data[i], 4);
i++;
}
}MOD: ezen a kódon még bőven lehetne optimalizálni, csak nem látom a többi részt.
MOD2: jah és igen. Malloc + 8 bites MCU? Remélem fut valamilyen OS ezen program alatt, ami a fizikai memóriát rendezi, mert az ilyen malloc-olás magában hordozza azt, hogy a kész programod egyszer beáll, mint a szög. A beágyazott rendszerben alapvetően tiltott a malloc használata.
[ 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... !!!
-
MATEO6600
őstag
Sziasztok!
Ide is beírom a kér(d)ésemet:
Adott egy komoly és alapos C# tudás, viszont C-ből teljesen 0-án állok, és szeretném megtanulni a nyelvet.
Tudnátok nekem valami javasolt könyvet / weboldalt / pluralsight tutorialt adni, aminek érdemes nekiállnom?
Rengeteg oktató anyag van, de általában 0 programozási tudásról indítanak, viszont nekem itt van a C# tudásom. -
buherton
őstag
válasz dabadab #5857 üzenetére
Gonosz , de nem tudok ezzel vitatkozni.
Porkoláb Zoltán neve nemzetközileg is bejáratott a C++ témában, és a C-hez is ért.
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
Cégen belül tanít minket C++-ra, mert hogy jelenleg masszív C programozókból áll a banda. Elképesztő. Nem sok olyan előadáson vettem részt ahol a bennem felmerülő kérdéseket kérdés nélkül megválaszolja. Gyakorlatilag nem kell kérdeznem.
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... !!!
-
ampulla
aktív tag
Hello.
Letöltöttem egy MinGW és szertnék lefordítani egy hello.c programot, azonban a compiler állandóan hibát dob, hogy hiányzik neki pár DLL. Már az összes cikket elolvastam és kipróbáltam de egyikkel sem ment. Továbbra is hiányzik neki. Az alábbi módon próbáltam fordítani:
gcc -c main.c -o test -LC:\Programming\Compiler\MinGW\bin -static -llibmingwex-0.dll -llibiconv-2.dll -llibgmp-10.dll -llibisl-15.dll
-
ampulla
aktív tag
válasz alapz@j #5867 üzenetére
Sajnos nem működik úgy sem azért kezdtem el paraméterezni. Azonban ha hozzáadom a path environment variable-hez, akkor működik. Ez mitől van?
A codeblocks siman lefordítja azzal a paranccsal, hogy:Gcc main.c -o hello
Egy sima hello world programot akarok lefordítani.
Másreszt azért mutat a bin-re mert a mingw install manager oda tette a dll fájlokat.
[ Szerkesztve ]
-
Ueda
senior tag
válasz ampulla #5871 üzenetére
Arra a dll -re nem a hello programnak van szüksége (pontosabban nem ahhoz van köze), hanem a gcc működéséhez kellene (automatikusan, azaz felhasználói beavatkozás nélkül). (A megoldást nem tudom.)
[ Szerkesztve ]
OS : EndeavourOS KDE . . . . . . Parancs menü : https://pastebin.com/u/txt444
-
Ueda
senior tag
-
zenwalk
senior tag
sziasztok
Tudnatok segiteni? -
Livius
őstag
Akit esetleg érdekel, az ELTE-éről Porkoláb Zoltán C Programozás egyetemi előadása itt elérhető, folyamatosan kerülnek fel az új részek ebből a félévből! Elég sok link halott már a bevezetőben, ha esetleg frissíti majd valaki, talán ez is jó helyen lenne ott.
[ Szerkesztve ]
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x8GB DDR4-3600MHz, Intel 545s 256GB SSD, MSI GeForce RTX 4060 Ti 16GB VENTUS 2X BLACK 16G OC
-
Dinter
addikt
Sziasztok. SDL-ben csinálnám a dolgom, eddig tök jól működött, aztán most valamitől megrákosodott.
Minden lefordul ezen kívül tökéletesen, csak itt a végén jön elő ez a hiba. Az alap mintaprogramnál is kiírja. Már az egészet is megpróbáltam újrarakni. Illetve van még egy olyan hiba is, hogy az n értékét növelve 7 után hirtelen 170ezerre ugrik. Mit tudnék vele kezdeni?
-
Domonkos
Ármester
Par ellenorzes azert elkene a kodba. Pl hogy sikerult-e egyaltalan megnyitni a filet, vogy hogy mit sikerul belole kiolvasni stb.
Fel tudnad valahova tolteni az egesz kodreszletet? Ugy egy fokkal konnyebb lenne ertelmezni.btw.
void *
-ot nem kell castolnod, az megy implicit[ Szerkesztve ]
Gender of electrical connectors is defined by the pins.
-
dobragab
addikt
TTF_Init()
eleg lenne egyetlen helyre, a main elejere. Siman lehet, hogy amiatt crashel, mert ketszer inicializalod, emiatt az exit is ketszer fut le, de az masodszor SIGSEGV-et csinal, ketszeres felszabaditas miatt.BME VIK infos Prog1, ugye?
[ Szerkesztve ]
Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.
-
Dinter
addikt
válasz dobragab #5887 üzenetére
Na rájöttem: sscanf-ben az utólsó %s-t kicseréltem %[^\n]-re, és így jó Már csak az a kérdés, hogy miért hibával lép ki, ha ki X-elem, tippre valamilyen terület lefoglalva marad.
Ez is megoldva: kerdes_kiir-en belül olyat szabadítottam fel, ami még kellett volna.
Igen.
[ Szerkesztve ]
-
kovisoft
őstag
Milyen hosszú sorok vannak a file-ban, aminek a sorait olvasod? Mert a char sor[128] tömbbe fgets(sor,255,fajl) utasítással 255 karaktert is beolvashatsz, ami aztán felülírhatja a stacket, és lehet ettől is az elszállás. Ill. hány sorból áll a file, mi van, ha nincs benne a szükséges 4 sor?
Másik megjegyzés: ebben a sorban sizeof(Kerdes*) kellene, mert pointer-tömböt foglalsz le. Persze gondot nem fog okozni, ha fölöslegesen foglalsz több memóriát, csak pazarlás:
Kerdes **tomb=(Kerdes**) malloc(15*sizeof(Kerdes));
Egyebek: nincs felszabadítva a lefoglalt memória, nincs lezárva a megnyitott file, de elszállást ezek sem okoznak, csak ha már túl sok leff foglalva/megnyitva.
Szerk: jól látom, közben megoldódott a probléma?
[ Szerkesztve ]
-
Gyb001
senior tag
Sziasztok.
Szerintetk ez így logikailag jól műküdik?
cut( float a[],int e,int i)
{int j;
if (abs(e-i)==4)
{
for (j = e; j < i; j += 1)
{
valami
}
return ...
}
else
{
return függvén2(cut(a,e,(e+i)/2), cut(a,(i+e)/2,i));
}
}
main()
{
cut(a,0,64);
}Egy tömböt akarok bejárni, úgy hogy amikor már csak 4 elem van akkor másik függvényt hív.
A bus station is where a bus stops. A train station is where a train stops. On my desk, I have a work station
-
buherton
őstag
Olvashatatlan a kódod és gyanítom van benne hiba.
Első blikkre jónak tűnik az elv, viszont a jelenlegi formájában nagyon veszélyes.
[ 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... !!!
-
kovisoft
őstag
Nem világos számomra, hogy minek van és minek nincs visszatérési értéke (pl. a cut ad vissza valamit vagy nem, és ha igen, akkor mit?). De ha ettől eltekintünk, akkor mi van, ha eleve 4-nél kevesebb elemű tömbre hívod meg? Akkor a cut végtelen ciklusba kerül, mert folyamatosan a felezős ágba kerül a vezérlés, és egy idő után a 0 méretű intervallumot felezgeti.
-
atkamaly
újonc
Sziasztok! Nem tudom hogy jó helyre írom-e, de remélem tudtok segíteni.
Egy olyan problémám lenne az alábbi egyszerű programmal, hogy valamiért a program kétszer írja ki a jelenlegi állást. Amikor bekérek egy új szín-szám kombinációt mindig kiírja az előzőt, majd a megváltoztatottat... Kezdő programozó vagyok, nagy segítség lenne ha valaki röviden el tudná magyarázniForráskód:
#include <stdio.h>
int main() {
int red[8];
int yellow[8];
int blue[8];
for (int i = 0; i < 8; i++) {
red[i] = i + 1;
yellow[i] = i + 1;
blue[i] = i + 1;
}
for (int J = 0; J < 10; J++){
char colour;
int number;
scanf("%c%d", &colour, &number);
if ( colour == 'R' ) { red[number - 1] = 0; }
else if ( colour == 'Y' ) { yellow[number - 1] = 0; }
else if ( colour == 'B' ) { blue[number - 1] = 0; }
for (int i = 0; i < 8; i++) { printf("%d ", red[i]);
printf("%d ", yellow[i]);
printf("%d \n", blue[i]); }
putchar('\n');
}
return 0;
}Előre is köszönöm a segítséget!
-
kovisoft
őstag
válasz atkamaly #5893 üzenetére
A második bekérést úgy érted, hogy amikor a J-s ciklusban másodszor (amikor J=1) kerül a vezérlés a scanf-re? Mert ebben az esetben azért írja ki az előző (J=0) lépésben megváltoztatott értékeket, mert nem állítod vissza a cikluson belül a red/yellow/blue tömb eredeti állapotát. Tedd be a cikluson belülre a red/yellow/blue inicializálását.
-
kispx
addikt
válasz atkamaly #5893 üzenetére
A elkezded debuggolni az alkalmazást, akkor látszik a colour változóba az előző sor '\n' kódját rakja bele. Számot pedig nem olvasott be. If-ek nem futnak le, viszont kiírja az előző állapotot. Majd a rákövetkező ciklusban sikeresen beolvassa az adatot.
Érdemes a bemenő adatok számát ellenőrizni.
if (scanf("%c%d", &colour, &number) == 2)
{
// A program többi része
}[ Szerkesztve ]
-
Dinter
addikt
Sziasztok.
Regex.h-t honnan tudok szerezni? A CodeBlocks azt írja, hogy nem található.
-
buherton
őstag
POSIX rendszeren vagy? Windows nem az .
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... !!!
-
Dinter
addikt
válasz buherton #5898 üzenetére
Az a környezet, ahol le kell futtatni a programot az, csak így nem tudom letesztelni akkor.
A program a következő: kapom a sorokat standard inputról, amiről el kell dönteni, hogy illeszkedik-e vagy nem a regex mintára. Majd fájl vége jelnél kiiírni az összes/jó sort 8-as számrendszerben. Ez így működik elvileg?
#include <regex.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int convertDecimalToOctal(int decimalNumber)
{
int octalNumber = 0, i = 1;
while (decimalNumber != 0)
{
octalNumber += (decimalNumber % 8) * i;
decimalNumber /= 8;
i *= 10;
}
return octalNumber;
}
bool reg_matches(const char *str, const char *pattern)
{
regex_t re;
int ret;
if (regcomp(&re, pattern, REG_EXTENDED) != 0)
return false;
ret = regexec(&re, str, (size_t) 0, NULL, 0);
regfree(&re);
if (ret == 0)
return true;
return false;
}
int main()
{
char sor[1000];
int sorok=0;
int jo=0;
const char* pattern="^[^#]_*(0x)?[0-9]*V6.+[A-Z]*.*mmese(B|a)";
while(scanf("%s[^\n]",&sor)!=EOF){
sorok++;
if(reg_matches(sor,pattern)) jo++;
}
int jo8=convertDecimalToOctal(jo);
int sorok8=convertDecimalToOctal(sorok);
printf("%d/%d",sorok8/jo8);
return(0);
}[ Szerkesztve ]
-
buherton
őstag
Ez így biztosan nem jó:
printf("%d/%d",sorok8/jo8);
, ezt próbáld helyette:printf("%d/%d",sorok8, jo8);
. Ascanf
helyett használd azfgets
függvényt. Osztást érdemes elkerülni ha lehet, mert erőforrás igényes.A legfontosabb soha ne adj ki úgy kezedből progamot, hogy előtte nem próbáltad. 99,99999% az esély arra, hogy rossz .
Tegyél fel Cygwint gcc-vel, vagy virtuális gépre rakj fel egy Linuxot.
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... !!!
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Állásajánlatok
Cég: Ozeki Kft
Város: Debrecen
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest