nicoverduin:
En dus dubbele quotes gebruiken. Enkele quotes zijn voor constanten.
foei foei nico (was er maar een zweep smiley )
enkele quotes zijn voor characters en dubbele quotes zijn voor null-terminated strings.
Omdat het dus gaat om null terminated strings moet je ook altijd 1 character meer hebben dan wat je nodig hebt.
Dus met
char wisselTxt[6];
kan je daar "FOUT" = 'F'+'O'+'U'+'T'+0 in kwijt en ook "FOUT!" maar "FOUT1!" geeft een moeilijk op te sporen fout.
Om de moeilijk op te sporen fout te vermijden gebruik ik liever strlcat en strlcpy. Daar geef je de grootte van de buffer mee.
Je krijgt dan typisch
ga het deze avond direct eens uit proberen, beide methodes
nog een bijkomend vraagje, als je je array opmaakt, wat is dan de waarde van Heat[15].wisselTxt tot op het moment dat je er een waarde aan toekend, NULL of zo?, gewoon een lege string ''?
ik wil het programma voor een deel als volgt afhandelen:
if (Heat[15].wisselTxt == '')
{
doe iets...
} else {
doe iets anders
}
Dit doet dus niet wat je wilt om 2 redenen.
single quote staat voor character maar je geeft er geen. 'a' is goed; 'A' is goed; 'aa' is het niet en '' ook niet
Ten tweede zeg je hier:
char wisselTxt[6];
dat wisselTxt een char array van 6 byte tekens lang is (dus maximaal 5 ASCII tekens plus één 0).
om char array te vergelijken met je een functie gebruiken zoal strcmp. == werkt niet met null terminated strings. Als je de String klasse gebruikt (en dat raad ik je niet aan) kan je wel == gebruiken.
Als de compiler deze code al wilt compileren vermoed ik dat hij een pointer vergelijking gaat doen die dus ook altijd fout zal even.
Wat de waarde is van toegewezen niet geïnitializeerde variabelen is volgens mij hardware/compiler afhankelijk. Alhoewel ik op Arduino bijna altijd 0 zie; hou ik het toch op onbekend.
Als een char array niet is geinitialiseerd heb je een onvoorspelbaar resultaat. Een uitstekende gewoonte is om ALTIJD een variabele te initialiseren zodat je altijd van een bekende situatie kan uitgaan/
En bij een char arrau[] is dat vrij gemakkelijk bijv:
char text[10];
en dan verder in de setup()
text[0] = '\0';
En voor de meer bekenden met C/C++... je het kan anders maar laat ze eerst maar de basis leren...
Yves
Ik denk niet dat je op het verkeerde spoor zit.
Maar C heeft eigenlijk geen echte ondersteuning voor strings. Maar wel voor arrays.
Je kan een String zien als een array van characters. Als je dus een array van 6 characters maakt en je steekt er "ab" in heb je 4 characters over waarvan de waarde onbekend is. Dat is nog veel vervelender dan dat jij je nu kan indenken.
Daarom dat er een conventie is die we null-terminated string noemen en die zegt: "de laatste character van de string wordt gevold door een character met ascii waarde 0" ( een character met ascii waarde 0 is hetzelfde is als ' \0' die Nico hiervoor gebruikt)
Dus als je zegt
Heat[15].wisselTxt ="FOUT!";
zeg je eigenlijk
Heat[15].wisselTxt ="FOUT!\0";
Daarom dat het belangrijk is om onderscheid te maken tussen een character (met enkel quotes) en een string (met dubbel quotes)
char char_a='a'; //dit is ok
char char_b="b"; // dit is niet ok want "b" is 'b'+'\0' dus je hebt 2 characters nodig en char_b heeft maar plaats voor 1 character.