Det är inte giltig C att modifiera string literals. Vad tror du händer om kompilatorn optimerar alla 6 strängar till att ha samma minnesadress, eller lägger strängarna i en read-only sektion?
Jo, det är tillåtet, men bara om det är en array (of char), då strängen bara initierar array'n, som allokeras i RAM.
Mitt exempel är fel då det blev en pointer av bara farten, men det räcker att ändra definitionen av "result" till:
Det är i övrigt en mycket dålig initiering. Dels för att det är mellanslag som används och dels för att initieringen ska utföras varje gång ett nytt block ska läsas in.
Det hade alltså räckt att dimensionera ett array med plats nog (om Arduino annars har den plats) och sedan låta programmet sköta resten.
Eftersom array'n emulerar en presentationsdisplay där vilka teckenpositioner som helst kan uppdateras 'random', så är paddingen effektiv för att ha skrivbara strängar hela tiden, annars hade vissa delar kunnat varit odefinierade.
Initieringen görs bara en gång vid programstart, därefter kommer värddatorn uppdatera/radera allt eftersom. Det finns inget 'clear screen'-kommando vad jag sett.
Det finns vad jag förstått inte heller någon definition på när ett nytt 'block' har lästs in, men det är ett annat problem. Måste antagligen avgöres med timeout på inkommande data.
Sen finns det naturligtvis andra sätt att fylla array'n än en strängkonstant med blanktecken, men tråden handlade inte om snyggaste sättet att koda i C...
Nej, det är odefinierat beteende enligt standarden. Sen finns det säkert plattformar det "fungerar" på, men då bör det nämnas att koden inte är portabel.
jah skrev:men bara om det är en array (of char), då strängen bara initierar array'n, som allokeras i RAM.
Precis, det är inte en string literal (vad heter det på svenska?) som du modifierar.
Nu kanske det verkar som att jag bara märker ord men jag tycker det är viktigt att man inte lär ut fel saker till nybörjare.