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

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Henry
Inlägg: 23588
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

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

Inlägg 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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

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

Inlägg av TomasL »

Har du kollat vad arrayen verkligen innehåller i något Watch-fönster eller liknande.
Användarvisningsbild
Henry
Inlägg: 23588
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

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

Inlägg 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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

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

Inlägg 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.
bearing
Inlägg: 11231
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

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

Inlägg 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.
Senast redigerad av bearing 12 september 2019, 21:36:56, redigerad totalt 1 gång.
Användarvisningsbild
Henry
Inlägg: 23588
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

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

Inlägg 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.
Senast redigerad av Henry 12 september 2019, 21:37:09, redigerad totalt 1 gång.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

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

Inlägg 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.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

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

Inlägg 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"
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

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

Inlägg 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.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

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

Inlägg 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.
Användarvisningsbild
adent
Inlägg: 4094
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

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

Inlägg 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
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

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

Inlägg 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.
bearing
Inlägg: 11231
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

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

Inlägg 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
}
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

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

Inlägg 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å.
bearing
Inlägg: 11231
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

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

Inlägg av bearing »

Du inledde ditt förra inlägg med "Nej det stämmer inte". Vad var det som inte stämde?
Skriv svar