sprintf kletar ihop alla värden i en enda sträng - Varför?
sprintf kletar ihop alla värden i en enda sträng - Varför?
Nu har jag stött på något mystiskt som jag inte kan förklara.
Jag har en kod som ska skicka ut allt på en LCD. Men innan koden skickas ut så måste den får textsträngar "" i form av en pekare.
sprintf(temperature1, "%d", TEMP1);
sprintf(temperature2, "%d", TEMP2);
sprintf(temperature3, "%d", TEMP3);
Vi säger att TEMP1 = 45 och TEMP2 = 50 och TEMP3 = 60
När jag skriver ut temperature1 på min LCD så ser jag 455060 och temperature2 blir 5060 och temperature3 blir 60.
Skulle jag bara köra med sprintf(temperature1, "%d", TEMP1); och skriva ut temperature1 så fungerar det bra. Men just när jag har andra sprintf-funktioner nedan så kletas allt ihop.
Har detta med raminnet att göra på min ATmega?
Jag har en kod som ska skicka ut allt på en LCD. Men innan koden skickas ut så måste den får textsträngar "" i form av en pekare.
sprintf(temperature1, "%d", TEMP1);
sprintf(temperature2, "%d", TEMP2);
sprintf(temperature3, "%d", TEMP3);
Vi säger att TEMP1 = 45 och TEMP2 = 50 och TEMP3 = 60
När jag skriver ut temperature1 på min LCD så ser jag 455060 och temperature2 blir 5060 och temperature3 blir 60.
Skulle jag bara köra med sprintf(temperature1, "%d", TEMP1); och skriva ut temperature1 så fungerar det bra. Men just när jag har andra sprintf-funktioner nedan så kletas allt ihop.
Har detta med raminnet att göra på min ATmega?
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Hur deklarerar du variablerna temperature1, temperature2 och temperature1?
Tänk på att dessa måste peka på varsin tillräckligt stor buffer innan sprintf(), annars blir det "bort i knas".
/johan
Tänk på att dessa måste peka på varsin tillräckligt stor buffer innan sprintf(), annars blir det "bort i knas".
/johan
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Ja! Det var det som var problemet! För liten buffert! Jag som tyckte att jag hade en rätt lämplig buffert.
Hur är det med de där buffert? Visst är det bättre att ha för stor, än precis?
Det fungerar nu! Tack för du påminnde mig om detta!

Om jag ska få plats med ett tal som har storleken mellan 10 och 99. Hur stor buffert ska man ha då?
Hur är det med de där buffert? Visst är det bättre att ha för stor, än precis?
Det fungerar nu! Tack för du påminnde mig om detta!


Om jag ska få plats med ett tal som har storleken mellan 10 och 99. Hur stor buffert ska man ha då?
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Nja, bufferten måste minst vara så stor så att variabeln får plats.Hur är det med de där buffert? Visst är det bättre att ha för stor, än precis?
Den behöver (och skall egentligen inte vara större).
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Normalt skall du ha plats för 3 tecken om talet ligger mellan 00 och 99.
D.v.s. två siffror och noll-tecknet som markerar 'slut på strängen'.
Noll-tecknet talar om för C var texten slutar, d.v.s. var utskriften stoppar.
Det finns ingen annan information som talar om hur lång en sträng är.
Ev. kan ett tal inledas med ett blanksteg för att få plats med plustecken, minustecken, ett eller flera blanksteg, högerjustering, blanksteg istället för plustecken o.s.v.
Detta går dock att styra genom att sätta olika tecken ihop med %d, t.ex. % d, %5d, %-5d, o.s.v.
Edit: förtydligande om %d
D.v.s. två siffror och noll-tecknet som markerar 'slut på strängen'.
Noll-tecknet talar om för C var texten slutar, d.v.s. var utskriften stoppar.
Det finns ingen annan information som talar om hur lång en sträng är.
Ev. kan ett tal inledas med ett blanksteg för att få plats med plustecken, minustecken, ett eller flera blanksteg, högerjustering, blanksteg istället för plustecken o.s.v.
Detta går dock att styra genom att sätta olika tecken ihop med %d, t.ex. % d, %5d, %-5d, o.s.v.
Edit: förtydligande om %d
Senast redigerad av bit96 6 februari 2015, 16:10:57, redigerad totalt 2 gånger.
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
menar du tal eller siffror(ASCII sträng), du använder ju "sprintf" som skriver strängar,,
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Jo, men, det beror ju på hur variablerna är deklarerade, och vilka formatsträngar som används.
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
I detta fall måste jag konvertera om t.ex. 1 till "1" i from av char-pekare då biblioteket U8GLIB vill ha det så.svanted skrev:menar du tal eller siffror(ASCII sträng), du använder ju "sprintf" som skriver strängar,,
Okej.TomasL skrev:Nja, bufferten måste minst vara så stor så att variabeln får plats.Hur är det med de där buffert? Visst är det bättre att ha för stor, än precis?
Den behöver (och skall egentligen inte vara större).
så om jag ska få plats med "talet 34" så måste jag ha 8 + 1 = 9 i buffert då mellanslag tar också upp ett tecken lika väl som \n?bit96 skrev:Normalt skall du ha plats för 3 tecken om talet ligger mellan 00 och 99.
D.v.s. två siffror och noll-tecknet som markerar 'slut på strängen'.
Noll-tecknet talar om för C var texten slutar, d.v.s. var utskriften stoppar.
Det finns ingen annan information som talar om hur lång en sträng är.
Ev. kan ett tal inledas med ett blanksteg för att få plats med plustecken, minustecken, ett eller flera blanksteg, högerjustering, blanksteg istället för plustecken o.s.v.
Detta går dock att styra genom att sätta olika tecken ihop med %d, t.ex. % d, %5d, %-5d, o.s.v.
Edit: förtydligande om %d
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Ja. Mellanslag inte bara "tar upp" ett tecken, det *är*
ett tecken precis som alla andra. Ingen som helst skillnad...
ett tecken precis som alla andra. Ingen som helst skillnad...
-
- Inlägg: 1409
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Du har ju inget \n i den strängen. Däremot har du ett "osynligt" \0 i slutet, så ja det behövs 9 tecken. Om du också ska ha med \n så blir det 10.Al_Bundy skrev:så om jag ska få plats med "talet 34" så måste jag ha 8 + 1 = 9 i buffert då mellanslag tar också upp ett tecken lika väl som \n?
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Al, om du hade läst i dina "hjälp-filer" hade du förstått hur sprintf fungerar.
- tecno
- Inlägg: 27252
- Blev medlem: 6 september 2004, 17:34:45
- Skype: tecnobs
- Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
- Kontakt:
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
Varför skulle han frångå sina principer att inte läsa på?
Re: sprintf kletar ihop alla värden i en enda sträng - Varfö
ja men det är aldrig ett tal i ordets bemärkelse utan en text eller en sträng...TomasL skrev:Jo, men, det beror ju på hur variablerna är deklarerade, och vilka formatsträngar som används.