Új hozzászólás Aktív témák
-
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)
-
CPT.Pirk
Jómunkásember
válasz gygabor88 #2603 üzenetére
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)
-
Gyuri16
senior tag
válasz CPT.Pirk #2602 üzenetére
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!
-
-
CPT.Pirk
Jómunkásember
-
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."
-
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?
Sk8erPeter
-
E1even
senior tag
válasz Sk8erPeter #2615 üzenetére
Köszi!
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."
-
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 lefordultypedef 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 ]
-
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.”
-
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. -
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.”
-
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.”
-
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! -
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
-
Jester01
veterán
válasz WonderCSabo #2628 üzenetére
Az is jó. Sőt, a while(str[i]) is elég, de azért a nullát szeretem kiírni.
[ Szerkesztve ]
Jester
-
Gyuri16
senior tag
válasz WonderCSabo #2631 üzenetére
mivel '\0'==0 ezert ez mindegy, bar nem tudom, hogy melyik megoldas a "legszebb".
lasd: [link]Nem vagyok egoista, csak uborkagyalu!
-
Karma
félisten
válasz WonderCSabo #2631 üzenetére
Egyébként a fordító (és a rendszer) szempontjából a karakterek is csak számok.
“All nothings are not equal.”
-
RexpecT
addikt
A nyáron szeretnék egy kicsit foglalkozni a C-vel.Milyen könyvet ajánlotok?Ez mennyire jó?
-
ntomka
nagyúr
válasz Sk8erPeter #2637 üzenetére
És a legtöbb hibát tartalmazó is.
Bár ha magadtól rájössz ezekre, akkor el lehet mondani, hogy tanultál belőle valamit.ツ Headphones on - World off
-
ntomka
nagyúr
válasz Sk8erPeter #2639 üzenetére
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
-
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 ). De ha már homár, akkor már nekem még mindig ezerszer inkább C++.
[ Szerkesztve ]
Sk8erPeter
-
ntomka
nagyúr
-
RexpecT
addikt
Köszönöm srácok, látom más is jár a Debreceni Egyetemre .Én gazdinfón vagyok ....
-
Sk8erPeter
nagyúr
válasz RexpecT #2643 üzenetére
É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.[ Szerkesztve ]
Sk8erPeter
-
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
[ Szerkesztve ]
Ú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!