På ren svenska, fan vilket geni du är Klas-Kenny!
Trodde absolut inte att du skrivit ihop något liknande, utan bara postade en länk!
Är det ok om jag stjäl den koden och försöker göra ett program i RPin där jag bara kan mata in pulståget och ut spottar den resultatet. Kan vara en halvklurig övning för mig att göra.
Tack än en gång! Blev extra glad när jag insåg att det stämde också
Jag slaktade den lite igår... Läste lite hur man använder getopt().
Trodde det gick relativt bra men ju mer jag rättar till, desto fler kompileringsfel. Har lite problem att flytta text mellan RPin och EF så här kommer bara koden. Ska jobba på att få över kompileringsfelen också, men det är lite många i nuläget.
Nu så, nu är kompileringsfelen nedanför koden.
binDecoderv1.c: In function ‘main’:
binDecoderv1.c:27:37: warning: implicit declaration of function ‘print_decoded_result’ [-Wimplicit-function-declaration]
print_decoded_result(atoi(optarg));
^~~~~~~~~~~~~~~~~~~~
binDecoderv1.c: At top level:
binDecoderv1.c:43:5: error: conflicting types for ‘print_decoded_result’
int print_decoded_result(char binary) {
^~~~~~~~~~~~~~~~~~~~
binDecoderv1.c:43:1: note: an argument type that has a default promotion can’t match an empty parameter name list declaration
int print_decoded_result(char binary) {
^~~
binDecoderv1.c:27:37: note: previous implicit declaration of ‘print_decoded_result’ was here
print_decoded_result(atoi(optarg));
^~~~~~~~~~~~~~~~~~~~
binDecoderv1.c: In function ‘print_decoded_result’:
binDecoderv1.c:45:16: error: invalid initializer
char b[] = binary;
^~~~~~
Inte provkört programmet, men det kompilerar i alla fall.
Flyttade main() till sist i programmet (funktionen print_decoded_result() var annars inte deklarerad innan den användes), bytte namn på variabeln binary till bara b och tog bort det misslyckade försöket att kopiera binary till b (för att göra som du försökte hade det krävt att allokera minne till b med malloc, sen kopiera med memcpy. Arrayhantering är inte alltid helt trivialt i C), samt lade till variabel hflag.
Försökte enbart göra ändringarna genom din text, blir lättare att förstå felen då. Nu kompilerar det med ett par varningar men får Segmenteringsfel när jag försöker tex ./binDecoderv1 -b 10101101010101.
Ska kika mer på det lite senare men roligt att se svaren om man bara skriver ./binDecoderv1 eller ./binDecoderv1 -h
Det enda den inte vill förstå nu (tror jag), det är den egentliga storleken på b[].
Kör jag tex ./binDecoder -b 110101010101 så får jag bara tillbaka 11. Den verkar enbart uppfatta b som storlek 1, och kör for-loopen endast en gång.
EDIT: Tror det är jag som rör ihop det. Det blev lite dumt att döpa både option till 'b' samt använda det som variabelnamn för det binära pulståget.
Nej, får inte ihop det riktigt. Förstår inte vad det är för värde som lägger sig i binary[]. Lägger sig varje bit som ett element?
Så här ser koden ut nu. Med kompileringsvarningen nedan.
binDecoderv1.c: In function ‘print_decoded_result’:
binDecoderv1.c:15:26: warning: ‘sizeof’ on array function parameter ‘binary’ will return size of ‘char *’ [-Wsizeof-array-argument]
for(int i=0; i<sizeof(binary); i+=2) {
^
binDecoderv1.c:11:31: note: declared here
int print_decoded_result(char binary[]) {
^~~~~~
Snyggt adent
Jag som testat strlen i olika varianter men inte så.
Programmet räknar fortfarande inte riktigt så det är fortfarande något fel.
Jag testade att göra printf(optarg); och då skriver den ut exakt det pulståget som jag matade in. Med andra ord får funktionen print_decoded_result(); det den ska.
Testade sen att i den funktionen skriva printf(strlen(binary)); men får en drös varningar då om pekare och annat. Tyvärr inte möjlighet att kopiera meddelandet nu.
Printf tar en sträng som första argument. Och en sträng i C är en pekare till en char-array.
Så ger du den en integer kommer den skriva ut vad som råkar finnas på den adressen som integerns tal är. Vilket sannolikt bara blir skräptecken.
Senast redigerad av Klas-Kenny 11 december 2018, 22:01:44, redigerad totalt 1 gång.