Hirdetés

2024. május 1., szerda

Gyorskeresés

Hozzászólások

(#2601) Gyuri16 válasza Jester01 (#2600) üzenetére


Gyuri16
senior tag

koszi a valaszt.

Nem vagyok egoista, csak uborkagyalu!

(#2602) CPT.Pirk


CPT.Pirk
Jómunkásember

Tesztelném assertel a kódot, amiben segítettetek, de valamiért állandó segmentation faultot kapok, akármit írok a kódba, és mindig ugyanaz a szöveg teljesen.

Codeblocks-ot használok Debianon.

Ez van a main.c-ben:

void utiltest(){
printf("Util tesztelés");
assert(strChomp(NULL)==NULL);
assert(strcmp(strChomp(""),"")==0);
assert(strcmp(strChomp("abc"),"abc")==0);
assert(strcmp(strChomp("\n"),"")==0);

}

int main()
{
utiltest();
return 0;
}

Akkor van még egy util.h-m:

#define UTIL_H_INCLUDED

char *strChomp(char *buffer);

Valamint az util.c-ben a kód az includok után.
#include <stdlib.h>
#include "macros.h"
#include "util.h"
...

Error nincs, és korábban, mikor még elég vacak kód volt bent, akkor működött a teszt.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2603) gygabor88 válasza CPT.Pirk (#2602) üzenetére


gygabor88
tag

Jo lenne latni, hogy mi van az util.c-ben ... helyen, de szinte biztos, hogy azert hal meg, mert strChomp-ot NULL-lal hivod es ilyen esetre nem figyel a metodus.

[ Szerkesztve ]

(#2604) CPT.Pirk válasza gygabor88 (#2603) üzenetére


CPT.Pirk
Jómunkásember

A buffer = c; sort kivéve ugyanaz, ami a 2595-ös [link] hozzászólásban van. Az elején pedig ott van a nullpointer vizsgálat, gondolom arra gondoltál.

[ Szerkesztve ]

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2605) Gyuri16 válasza CPT.Pirk (#2602) üzenetére


Gyuri16
senior tag

megprobalhatnad debuggolni, megnezed melyik tesztnel segfaultol es kitalalod mi a baja

ha azt a kodot hasznalod ami fentebb van, akkor szerintem ez a teszt hal meg:
assert(strcmp(strChomp(""),"")==0);
ha a fuggvenyed ures stringet kap parameterkent, akkor ez az if:
if (buffer && *buffer) {
nem fog teljesulni (a masodik feltetel miatt). ezert a fuggveny nullal ter vissza, es azt adod oda a strcmp-nek.

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#2606) gygabor88 válasza CPT.Pirk (#2604) üzenetére


gygabor88
tag

Ha jol latom string literalban akartal atirni egy karaktert. (strChomp("\n") eseten)
C string

[ Szerkesztve ]

(#2607) CPT.Pirk válasza Gyuri16 (#2605) üzenetére


CPT.Pirk
Jómunkásember

Erre ráéreztél, az a sor miatt, és a \n-es assert miatt van segfault. A NULL és az abc-s sornál jó.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2608) Gyuri16 válasza CPT.Pirk (#2607) üzenetére


Gyuri16
senior tag

ettol fuggetlenul nezd meg amit gygabor88 linkelt. ugyanezt irta Jester01 is par hszel feljebb.

Nem vagyok egoista, csak uborkagyalu!

(#2609) CPT.Pirk válasza Gyuri16 (#2608) üzenetére


CPT.Pirk
Jómunkásember

Akkor most magyarul a char *c = buffer; sortól kezdve az egész kód rossz, mert ebben a formában maximum olvasni lehet a c -t?

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2610) Jester01 válasza CPT.Pirk (#2609) üzenetére


Jester01
veterán

Nem a függvény kódja a rossz, hanem ahogy hívod. Mivel a függvényed módosítani szeretné a paramétert, így string literált nem adhatsz neki (merthogy az csak olvasható).

Jester

(#2611) CPT.Pirk válasza Jester01 (#2610) üzenetére


CPT.Pirk
Jómunkásember

assert(strcmp(strChomp("\n"),"")==0);

Tehát itt kellene máshogy megadnom a \n -t?

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2612) Jester01 válasza CPT.Pirk (#2611) üzenetére


Jester01
veterán

Igen. Például karakter tömbként deklarálva, vagy strdup-pal lemásolva

Jester

(#2613) CPT.Pirk válasza Jester01 (#2612) üzenetére


CPT.Pirk
Jómunkásember

Köszi, karakter tömbbel megcsinálva simán ment, és ez alapján megcsináltam a whitespace eltávolító függvényt is.
Köszönöm mindenkinek a segítségét.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2614) E1even


E1even
senior tag

Sziasztok!

Egy kis segítséget szeretnék kérni C nyelv alapismeretekből.
Meg kellene csinálnom holnapra 5 feladatot belőle.
Gondolom aki járatos benne annak egyszerű megcsinálni.
Meg sajnos időm sincs vele foglalkozni.

Ezek lennének a feladatok:

Aki tudna segíteni, annak nagyon megköszönném (találja ki/írja meg, hogy mivel/mennyivel tudnám honorálni érte).

Előre is nagyon köszönöm a segítséget!

Üdv.

"Régen az égre néztünk és azon töprengtünk, hogy hol a helyünk a csillagok között. Most lefelé nézünk, és csak fészkelődünk a porban."

(#2615) Sk8erPeter válasza E1even (#2614) üzenetére


Sk8erPeter
nagyúr

Miért nem szöveg formájában másoltad be a feladatot?
Csak mert a másik fórumba is ilyen kép formájában tetted be, és ezzel csak megnehezíted annak a feladatát, aki megcsinálná neked, mert így még a fejlesztőrkörnyezetbe sem tudja legalább kommentként bemásolni, hogy tudja, mit is kell csinálni. Nem fog a kedvedért váltogatni az ablakok közt. :)

Nekem vizsgám van holnap, úgyhogy én tuti nem tudom megcsinálni, de gondoltam azért javaslom, hogy inkább másold be szöveg formájában. Vagy még erre sem volt időd? :D

Sk8erPeter

(#2616) E1even válasza Sk8erPeter (#2615) üzenetére


E1even
senior tag

Köszi! :R

Itt van szövegként is:

Feladat
Készítsünk a négy alapművelet végrehajtására alkalmas kalkulátort.
Útmutatás:
1; A kiszámolandó feladatot 2 egész szám és egy karakter
segítségével kérjük be, azaz 3*5, vagy 3-2 stb. formában.
2; A program által elvégzendő művelet a beírt karaktertől függ.
3; Ha a két numerikus adat között megadott művelet eltér a 4
alapművelet jelétől, akkor írjuk ki, hogy nem értelmezhető a művelet.
Gyakorlás:
Írjunk egy olyan programot, mely bekér egy érdemjegyet, melyet aztán
szöveges minősítéssel jelenít meg.

Feladatok
1. Írjunk egy ciklust, amelyik megszámol valamilyen betűk előfordulását egy
sztringben.
2. Léptessük egy tömb összes elemét eggyel az eleje felé. A tömb egyik végén
kilépő elem jöjjön be a másik oldalon.
3. Írjon programot, amelyik egy adott dátumról (év, hónap, nap) kiírja, hogy az év
hányadik napja. Az év paraméterre a szökőévek miatt van szükség. (Szökőév
minden negyedik, nem szökőév minden századik, mégis az minden 400-adik. A
2000. évben ezért volt szökőév.)
4. Készítsünk egyszerű menüvezérelt programot! A program tároljon el egy számot,
melynek kezdőértéke a=1! Ezt követően jelenítse meg a képernyőn a értékét, és
az alább látható menüt!
A megfelelő menüpont számának megadása (scanf-el) esetén a program írja ki,
hogy melyik menüpontot választottuk, majd hajtsa végre a-n a kiválasztott
műveletet, írja ki újból a új értékét és a menüt! A menüből mindaddig lehessen
újból választani, míg a kilépést nem választja a felhasználó!

0. Alapérték visszaállítása (a=1)
1. Hozzá ad 1-et
2. Előjelét megfordítja
3. Szorozza 2-vel
4. Kivon belőle 5-öt
9. Kilépés

[ Szerkesztve ]

"Régen az égre néztünk és azon töprengtünk, hogy hol a helyünk a csillagok között. Most lefelé nézünk, és csak fészkelődünk a porban."

(#2617) E1even válasza E1even (#2616) üzenetére


E1even
senior tag

Köszi, már tárgytalan. :D

"Régen az égre néztünk és azon töprengtünk, hogy hol a helyünk a csillagok között. Most lefelé nézünk, és csak fészkelődünk a porban."

(#2618) labuwx


labuwx
tag

Sziasztok!

Mikrokontrollerhez írok egy szoftveres PWM jelgenerátort, de a szükséges adatokat tároló struktúra írásakor megakadtam.
A struktúra kódja, ami még hiba nélkül lefordul

typedef struct
{
uint16_t resolution;
uint8_t channels;
uint8_t bytes;
uint8_t * data;
}PWM_t;

Amikor megpróbálok egy mutatót csinálni és memóriát foglalni,

PWM_t * pwm=(PWM_t *) malloc(sizeof(PWM_t));

akkor kapok egy hibaüzenetet és két veszély jelzést:
-error: initializer element is not constant
-warning: implicit declaration of function 'malloc'
-warning: incompatible implicit declaration of built-in function 'malloc'

A másik kérdésem, hogy hova kellene írnom a volatile módosítót, ha a mutatón keresztül el szeretném érni a struktúrát és az elemeit egy interruptból?

A segítséget előre is köszönöm.

[ Szerkesztve ]

(#2619) Karma válasza labuwx (#2618) üzenetére


Karma
félisten

1) Kellene egy malloc függvény először. Legegyszerűbb esetben ennyi megoldja:

#include <stdlib.h>

2) Ezt sajnos nem tudom, de első próbának a pwm változód deklarálásához tenném. Azaz a bemásold sorodat kezdeném úgy, hogy volatile. Nem tudom, hogy a fordító hogy viselkedik pointerrel elért struktúráknál, nekiáll-e egyáltalán optimalizálni...

“All nothings are not equal.”

(#2620) labuwx válasza Karma (#2619) üzenetére


labuwx
tag

Köszönöm a segítséget.
Az stdlib.h eltüntette a két figyelmeztetést és ekkor beugrott, hogy az malloc() nem operátor, ezért csak függvényből lehet hívni.
A volatile módosítóval lefordult a kód, de még nem próbáltam ki élesben. Ha nem érem el interruptból, akkor a struktúra dekralálásához is odairogatom.

(#2621) Karma válasza labuwx (#2620) üzenetére


Karma
félisten

A volatile nem azért kell, hogy elérhesd interruptból (ahhoz csak "megfelelő" helyre kell tenned), hanem azért, hogy a fordító ne optimalizálja ki az olyan ifeket és for/while ciklusokat, ahol ennek a struktúrának az elemeit használod fel a feltételben.

Volatile nélkül ugyanis azt gondolhatja a fordító megfelelően magas -O szint mellett, hogy "na ez biztos nem változik meg, ez a feltétel felesleges, kidobom" - és csodálkozhatsz hogy nem reagál a program. A volatile ezt tiltja meg.

BTW szerintem egyszerűbb lenne, ha nem a heapen hoznád létre ezt a struktúrát. Végülis elég kicsi. Az interruptos elérés miatt lehet, hogy globális változónak praktikusabb (más fordítási egységben. pl. az interruptkezelődben meg externnel hivatkozol rá).

[ Szerkesztve ]

“All nothings are not equal.”

(#2622) Karma válasza labuwx (#2620) üzenetére


Karma
félisten

Ezt a cikket most találtam, érdemes elolvasni.
A kommentek között az eredeti kérdésedre is választ kapsz, idézem:

Here is the best practice for use with structs that define memory-mapped I/O device registers:

typedef struct { ... } volatile newtype_t;
newtype_t * const p_newtype = (newtype_t *) BASEADDR;

[ Szerkesztve ]

“All nothings are not equal.”

(#2623) labuwx válasza Karma (#2622) üzenetére


labuwx
tag

Szia!

Kipróbáltam élesben, magas optimalizációval és működik (volatile módosító nélkül is).
A linket köszönöm. Ha végeztem ezzel a projekttel, akkor beleásom magam, hogy mikor és hova kell a volatile és egyéb módosítók.

(#2624) Bero


Bero
aktív tag

Üdv,
Egy olyan problémával fordulnék hozzátok. Egyszerűen nem tudom mit rontok, rengetegszer, rengeteg verzióban próbáltam már, de nem megy.

Egy stringet olvasok be, három szóból áll, közöttük szóköz. Ezt kellene szétbontanom 3 különböző stringre, azaz egy stringben egy szó.

Inputellenőrzés után így próbáltam:

while(!isspace(str[i])){
szoegy[i]=str[i];
i++;
}

while(isspace(str[i])){
i++;
}


while(!isspace(str[i])){
szoketto[i]=str[i];
i++;
}

while(isspace(str[i])){
i++;
}

while(i==strlen(str)){
szoharom[i]=str[i];
i++;
}

Az első szóig okés, de a következő kettő már nem. Próbáltam for-al is, de ugyan ez az eredmény. Mit csinálok rosszul?
Köszönöm előre is!

(#2625) Jester01 válasza Bero (#2624) üzenetére


Jester01
veterán

A második-harmadik szóhoz saját index kell, hiszen nem fog egyezni a bemenő indexszel csak az első szó.
"alma körte banán" itt a körte k betűje a bemeneti stringben 5. pozícióban van, de a második szónak ez a 0. pozíciójába kell kerüljön.

A while(i==strlen(str)) helyesebben while(i<strlen(str)), illetve még jobb while(str[i] != 0).

Továbbá C-ben a stringek végére kell egy 0 lezáró is.

Jester

(#2626) Bero válasza Jester01 (#2625) üzenetére


Bero
aktív tag

Köszönöm a segítséget, így már működik. :R
Ezek szerint a három különválogatott szó végére nekem kell még behelyezni a \0 karaktert?

(#2627) Karma válasza Bero (#2626) üzenetére


Karma
félisten

Pontosan.

“All nothings are not equal.”

(#2628) WonderCSabo válasza Jester01 (#2625) üzenetére


WonderCSabo
félisten

while(str(i) != 0)(/I)

Nem inkább while(str[i] != '\0') ?

[ Szerkesztve ]

(#2629) Jester01 válasza WonderCSabo (#2628) üzenetére


Jester01
veterán

Az is jó. Sőt, a while(str[i]) is elég, de azért a nullát szeretem kiírni.

[ Szerkesztve ]

Jester

(#2630) Bero válasza Karma (#2627) üzenetére


Bero
aktív tag

Köszönöm! :R

(#2631) WonderCSabo válasza Jester01 (#2629) üzenetére


WonderCSabo
félisten

A kérdésem arra irányult, hogy a Te verziódban nem a '\0' karaktert ellenőrizted, sőt nem is raktad '' közé, így számnak veszi elvileg a fordító. Vagy nem?

(#2632) Gyuri16 válasza WonderCSabo (#2631) üzenetére


Gyuri16
senior tag

mivel '\0'==0 ezert ez mindegy, bar nem tudom, hogy melyik megoldas a "legszebb".
lasd: [link]

Nem vagyok egoista, csak uborkagyalu!

(#2633) WonderCSabo válasza Gyuri16 (#2632) üzenetére


WonderCSabo
félisten

Értem.

(#2634) Karma válasza WonderCSabo (#2631) üzenetére


Karma
félisten

Egyébként a fordító (és a rendszer) szempontjából a karakterek is csak számok.

“All nothings are not equal.”

(#2635) WonderCSabo válasza Karma (#2634) üzenetére


WonderCSabo
félisten

Picit belegondolva, télleg... :K

(#2636) RexpecT


RexpecT
addikt

A nyáron szeretnék egy kicsit foglalkozni a C-vel.Milyen könyvet ajánlotok?Ez mennyire jó?

(#2637) Sk8erPeter válasza RexpecT (#2636) üzenetére


Sk8erPeter
nagyúr

Tulajdonképpen általában ez az elsődlegesen ajánlott könyv C-programozáshoz. :K

Sk8erPeter

(#2638) ntomka válasza Sk8erPeter (#2637) üzenetére


ntomka
nagyúr

És a legtöbb hibát tartalmazó is. :D
Bár ha magadtól rájössz ezekre, akkor el lehet mondani, hogy tanultál belőle valamit. :D

ツ Headphones on - World off

(#2639) Sk8erPeter válasza ntomka (#2638) üzenetére


Sk8erPeter
nagyúr

Akkor miért nem ajánlasz helyette megfelelő alternatívát? :W :U
Mondjuk a szokásos fikafröcskölés egyszerűbb. :D

Sk8erPeter

(#2640) ntomka válasza Sk8erPeter (#2639) üzenetére


ntomka
nagyúr

Dehogy is fikázom. Teljesen igaz amit írtam, nekünk is ezzel a szöveggel mutatta be Juhász István tanár úr. :)
A második mondatom pedig konstruktív volt (ma úgyis ez a vesszőparipám). ;] (Súgó: én is ebből tanultam és magamtól megtaláltam a hibákat végül amikor megértettem a csíziót. Szóval én ajánlom a könyvet, mert ha eljutsz oda ahova én, akkor már tényleg tanultál valamit. Ettől függetlenül nem szeretek C-ben programozni, főleg jó nem vagyok benne, de hasznosnak tartom, hogy tanulhattam.)

ツ Headphones on - World off

(#2641) Sk8erPeter válasza ntomka (#2640) üzenetére


Sk8erPeter
nagyúr

Én is fedeztem fel benne hibákat, ettől függetlenül még mindig ajánlottnak tartom, legalábbis én nem ismerek jobb könyvet, de ez persze lószart sem jelent, biztosan van pár.
Ettől függetlenül a srác rákérdezett, hogy ebből lehet-e tanulni, szerintem lehet.

Amúgy én is kényelmetlennek találom a C-ben programozást, dehát attól még szükséges rossz - nekem, de van, aki annyira jó benne, hogy éppen a magasabb szintű nyelvek nem szimpatikusak neki. Meg hát elvitathatatlan erényei vannak gyorsaság terén is (meg lehetséges hibaforrások terén is :P). De ha már homár, akkor már nekem még mindig ezerszer inkább C++.

[ Szerkesztve ]

Sk8erPeter

(#2642) ntomka válasza Sk8erPeter (#2641) üzenetére


ntomka
nagyúr

Egyetértünk. :)

ツ Headphones on - World off

(#2643) RexpecT


RexpecT
addikt

Köszönöm srácok, látom más is jár a Debreceni Egyetemre :).Én gazdinfón vagyok :)....

(#2644) Sk8erPeter válasza RexpecT (#2643) üzenetére


Sk8erPeter
nagyúr

Én speciel nem oda járok. :)
Jé, nahát, van, ahol gazdinfón is tanítanak C-t? :) Ez meglep. Haverom Corvinusra jár ugyanilyen szakra, náluk kapásból C#-pal kezdtek.

Tulajdonképpen nem is tudom, melyik a jobb módszer. Rengeteg orbitális szopást átélni kezdő programozóként a sima C-vel, vagy kicsit kevesebb szívással elkezdeni gányolni egy magasabb szintű nyelven.
Nem könnyen eldönthető kérdés, de így utólag talán azt mondanám, számomra jobban megérte C-vel kezdeni a hajtépést, és ezáltal később kicsit jobban érteni a magasabb szintű nyelvek működését - meg átérezni, hogy mennyivel kevesebb felé kell figyelni, minél "feljebb" megyünk. :D

[ Szerkesztve ]

Sk8erPeter

(#2645) ntomka válasza RexpecT (#2643) üzenetére


ntomka
nagyúr

Szerencsére már nem. :)

ツ Headphones on - World off

(#2646) Retekegér válasza RexpecT (#2636) üzenetére


Retekegér
HARDVERAPRÓD

Alternatívaként szerintem ez sem rossz.

<< Heimdal >>

(#2647) RexpecT válasza Retekegér (#2646) üzenetére


RexpecT
addikt

Köszi :).

(#2648) Korcsii


Korcsii
őstag

Tud valaki olyan megoldást, amivel egy C(++) program el tudja indítani a lejátszást win meadia playerben (vagy VLC, Winamp)? A sebesség is számítana, így ha nem muszáj, a cmd kimaradna... akár meg is nyitom neki előre, akár le is pause-olom 00:00-nál, csak pöccre induljon :)

:R

[ Szerkesztve ]

(#2649) bpx válasza Korcsii (#2648) üzenetére


bpx
őstag

miért, a "cmd"-vel mi a baj?
pl. vlc-ben kikapcsolod a font cache újraépítését meg a frissítések keresését és pöccre indul

(#2650) Korcsii válasza bpx (#2649) üzenetére


Korcsii
őstag

vlc-vel még nem is próbáltam :B pedig biztos gyorsabban indul...
én hü.. késő volt :B

Copyright © 2000-2024 PROHARDVER Informatikai Kft.