Sida 2 av 7

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 12 september 2019, 21:14:00
av Henry
bearing: Ha det visste jag inte om att man inte kunde utan trodde att varje tecken behövde definieras var för sig så att säga, men det är ju klart att även detta funkar nu när jag ser det och var ju bra enklare och funkar precis likadant, tackar. :)

Tja vet inte vad det är så att säga men jag får ingen nolla eller dylikt efter, det funkar precis som jag vill och fortsätter inte heller eller så vad det verkar.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 12 september 2019, 21:15:35
av TomasL
Har du kollat vad arrayen verkligen innehåller i något Watch-fönster eller liknande.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 12 september 2019, 21:17:32
av Henry
Visserligen inte, det enda jag går efter är om det visas rätt det jag förväntar mig i förhållande till de högst rudimentära kunskaper som jag inom detta. Det är sedan inget som skall användas som så i programmet utan det är bara för en representation av vad som händer ut på en display.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 12 september 2019, 21:22:49
av TomasL
Oavsett, så behöver du få in i ditt programmerande att göra rätt, dvs se till att i princip alla variabler är initierade, vid deklaration (i princip är de enda undantagen räknarvariabler som används i "for" loopar och liknande, eftersom de alltid initieras i loopen.

Nästa gång, skriver du i ren C och där har du ingen förlåtelse för halvtaskig arduino-programmering.
Så, gör rätt från början, så slipper du framtida överraskningar.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 12 september 2019, 21:25:57
av bearing
Henry skrev:Tja vet inte vad det är så att säga men jag får ingen nolla eller dylikt efter, det funkar precis som jag vill och fortsätter inte heller eller så vad det verkar.
Det fungerar såhär att printfunktionen loopar genom strängen tills den stöter på noll, och slutar då. Nolla terminerar/avslutar strängen. Det är alltså inte '0', utan 0. Den tidigare hade skickats som en asciinolla och synts. Den senare skickas inte, utan berättar bara för funktionen att strängen tar slut. Alla strängar innehåller en avslutande nolla i C.

char value[] = "2.86E-7" tar upp 8 bytes, och är samma som char value[8] = {'2', '.', '8', '6', 'E', '-', '7', 0} <- notera nollan jag lade in på slutet.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 12 september 2019, 21:36:04
av Henry
Ok då hänger jag med, vet att jag läst det någonstans en gång.

TomasL: är inte grejer initierade på rätt sätt klagar väl kompilatorn, annars lär ju inte programmet fungera som tänkt. Inga direkta planer på att gå vidare till C, detta är bara för en grej och en grej endast och de krav jag har funkar de funktioner som finns Arduino IDE.

Kodexemplet kan du totalt ignorera som så, det är förstås inte på något vis så som jag kommer att skriva huvudprogrammet sedan.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 12 september 2019, 21:36:23
av snigelen
TomasL skrev:Man skall aldrig utgå ifrån att oinitierade variabler initieras till 0x00.
Det normala är väl att det inte är så.
Det normala? I C, och C++ som i det här fallet, är variabler som är globala eller static garanterat initierade. Till skillnad från lokala, oinitierade variabler (icke static), som inte behöver ha ett definierat värde.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 12 september 2019, 21:43:46
av TomasL
Spelar enligt mig ingen roll, eftersom man som jag ser det alltid skall initialisera variabler, för att slippa överaskningar.
Ja statiska variabler brukar initialiseras till 0, men om man tar som regel att alltid initialisera, så missar man ingenting.

På samma sätt som i "if"ar alltid börja med konstanten, dvs "if 0==a"

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 13 september 2019, 10:25:57
av Icecap
Hmmm - själva funktionen att skriva ut en sträng till det kommer en 0x00 har jag i mina rutiner - men den heter något annat.

I Arduino gör Serial.Print() just det samma: skriver tecken efter tecken och väntar på att det blir plats till nästa.

Att sedan inte alla som använder Arduino är lika mycket med i vad de gör och vilka funktioner som finns är väl knappast något okänd.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 13 september 2019, 10:45:07
av Lennart Aspenryd
Man måste väl inte hacka på Arduino i alla sina dagar!
Om jag är nöjd med att ta mig från A till B på min cykel,
numera batteridrivet med både Volt och Ampere, då är väl det OK så länge den gör jobbet.
Jag underskattar inte därför alla som kan få köra Formel1, om än på avstängda och begränsade banor ;-)
Men jag uppskattar din kunskap.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 13 september 2019, 11:53:04
av adent
Det Bearing säger stämmer bra. Du hade helt enkelt tur att det råkade ligga en 0:a efter tecknen i minnet när du skrev ut din char-array.

char foo[100] = "Hejsan!";

och

char foo[100] = {'H','e','j','s','a','n','!',0};

Är likvärdiga. Det innanför "":ar blir en sträng och kommer termineras med 0.

ett annat sätt att skriva samma sak:

char foo[100] = {'H','e','j','s','a','n','!','\0'};

MVH: Mikael

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 13 september 2019, 12:23:26
av snigelen
Nej det stämmer inte. Initierar man inte hela arrayen så fylls resten ut med nollor, såvida det inte är en lokal, icke static oinitierad variabel.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 13 september 2019, 18:42:23
av bearing
Snigelen, menar du att den lokala arrayens 10 sista bytes fylls med nollor i detta fall:

Kod: Markera allt

char* my_function(void)
{
  char my_local_array[20] = "123456789";
  return my_local_array; //lol :D :D ^^ ^^ =) =) not OK
}
?

Vi verkar ju vara överens om att i följande fall fylls de sista 10 bytesen med nollor:

Kod: Markera allt

char my_global_array[20] = "123456789";
static char my_private_array[20] = "123456789";

char* my_other_function(void)
{
  static char my_static_array[20] = "123456789";
  return my_static_array;
}
Jag har trott att det första fallet är identiskt med detta:

Kod: Markera allt

char* my_last_function(void)
{
  char my_last_local_array[20];
  memcpy(my_last_local_array, "123456789", 10);
  return my_last_local_array; //lol
}

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 13 september 2019, 19:00:18
av snigelen
Men i Henrys kod var det ju ingen lokal array, då är den garanterad att fylla ut med nollor.

En oinitierad lokal variabel är odefinierad.

En global/static variabel fylls ut med nollor om den inte är helt initierad.

En lokal/automatic variabel som inte är initierad kan ha vilket värde som helst.

En lokal/automatic variabel som är delvis initierad borde också fyllas med nollor. Standarden(erna) är inte jättetydlig(a) på den punkten, men gcc fyller i alla fall på med nollor i det fallet också.

Re: Skriva ut array, varför inte bara på ett sätt?

Postat: 13 september 2019, 19:33:39
av bearing
Du inledde ditt förra inlägg med "Nej det stämmer inte". Vad var det som inte stämde?