Nog maar een newbee vraagje

algemene C code
Berichten: 109
Geregistreerd: 05 Dec 2014, 22:09

Nog maar een newbee vraagje

Berichtdoor Palumbus » 12 Dec 2014, 00:51

Ik heb de volgende code:

Code: Alles selecteren
#define nodeID 1         // Physical Sensor ID
#define nodeTYPE 'P'         // type of sensor
#define nodeVERSIE "1.0.a"      // verion sensor

// Configure the payload
struct payload_t {
   int node;
   char sensortype;
   int battery;
   char versie[6];
};

// definieer 'pakketje' als payload
payload_t pakketje;

// vul payload
pakketje.node = nodeID;
pakketje.sensortype = nodeTYPE;
pakketje.battery = BatteryPercentage();
pakketje.versie = nodeVERSIE;


Wat is er mis met de laatste regel ?
Kan ik zo de payload 'pakketje' niet vullen met een waarde uit een #define ?

Advertisement

Berichten: 11
Geregistreerd: 02 Jul 2014, 21:34

Re: Nog maar een newbee vraagje

Berichtdoor GF-Projects » 12 Dec 2014, 10:19

Probeer eens:
strcpy(pakketje.versie, "%s", nodeVERSIE);

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Nog maar een newbee vraagje

Berichtdoor nicoverduin » 12 Dec 2014, 14:14

GF-Projects schreef:Probeer eens:
strcpy(pakketje.versie, "%s", nodeVERSIE);

Dat gaat niet werken omdat je bij strcpy geen formatted string mee kan geven. Dat is hier ook niet nodig. Je kan gewoon dit gebruiken:
cpp code
strcpy(pakketje.versie, nodeVERSIE);

Er is hier sprake van een character array. Als je dan alleen de naam van die variabele geeft, dan geef je alleen het adres door van de eerste byte. Het is dus het zelfde als:
cpp code
&array[0] = adres van eerste plek van array


Wat je hier wilt doen is een string copy uitvoeren met als syntax:
cpp code
strcpy (*ontvangende adres, *versturende adres); = kopieer alle bytes van versturende adres naar ontvangende adres met gelijkmatige ophoging totdat 
je een '\0' teken tegen komt. En kopieer die ook naar het ontvangende veld

En daar zit nog wel eens de crux. Mensen vergeten deze extra byte mee te nemen in het ontvangende veld voor de grootte.
De compiler zal in dat geval bij een volgende benadering (bijv. println() oid) niet weten wanneer het laatste teken er is om te printen. In het meest extreme geval zal println() de rest van het ram geheugen proberen uit te printen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 109
Geregistreerd: 05 Dec 2014, 22:09

Re: Nog maar een newbee vraagje

Berichtdoor Palumbus » 12 Dec 2014, 14:32

Die snap ik, dank

Echter ik kan nergens vinden wat het middelste argument "%s" doet.
Alle uitleg heeft het over 2. nl strcpy(dest, src)

g

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Nog maar een newbee vraagje

Berichtdoor nicoverduin » 12 Dec 2014, 14:49

Palumbus schreef:Die snap ik, dank

Echter ik kan nergens vinden wat het middelste argument "%s" doet.


g

Dat is ook gewoon fout...
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 109
Geregistreerd: 05 Dec 2014, 22:09

Re: Nog maar een newbee vraagje

Berichtdoor Palumbus » 12 Dec 2014, 15:02

Helder, dankje
en die '\0' met strings hou ik nu rekening mee!

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 4 gasten