Sida 1 av 2

c programmerings fråga, skicka en vektor till en funktion..

Postat: 8 januari 2005, 21:35:38
av sven
har en fråga; om jag har en vektor som denna
struct char chars[] = {"B"};

och vill skicka tillbaka värdet chars[0] till funktionen writechar(uint16_t b)
hur gör jag då? uppenbarligen så kan jag inte bara skicka det med writechar(chars[0]);?????

Postat: 8 januari 2005, 21:49:12
av Xyzzy
låter som att writechar() vill ha en 16 bitars variabel (om 'uint16' är definerad som det förståss) medan 'chars' är en byte(enligt initieringen) i de flesta fall, dvs 8 bitar.

Postat: 8 januari 2005, 21:54:01
av cykze
struct har inget där att göra. Och byt ut citattecknena mot enkla sådana ('), eftersom B ska vara en char och ingen sträng. writechar() ska väl ta en uint8_t som argument? En char är ju 8 bitar.

Ex.

char chars[] = {'B', 'r', 'a'}; // En array av chars
writechar(chars[0]); // Anropa writechar() med den första char:en i chars som argument.

Postat: 9 januari 2005, 02:09:30
av speakman
Men måste man prångla in en 8bit i en 16bit så gör en cast:
writechars((uint16_t)(chars[0]));

Mvh
speakman

Postat: 9 januari 2005, 18:52:55
av sven
efter lite pillande lyckades ja få de att funka... var till ett lokup table till min grafiska lcd föressten..
men nu har ja ett nytt problema, hur deklarerar jag en hel string med bokstäver, char går väll bara att använda till en åt gången??
eller?

Postat: 9 januari 2005, 19:36:38
av AndLi
en sträng deklareras som en array.. För det är ju det en sträng är, en array av tecken..

Alså funkar

Kod: Markera allt

char alongstring[20] = {'A','B','C','D' osv till du har 20 st .'T'};
ger dig en sträng , försöker du skriva ut den med tex printf(" Sträng %s",alongstring); så kommer den dock skriva ut till den stöter på en NULL i minnet.. vilket inte är helt lyckat...
Ska du göra det så sätt alongstring[19]=0;
Ska du bara ha den som en lookup table så behöver du inte fundera på det.. eftersom du vet hur lång den är!

Postat: 9 januari 2005, 20:57:13
av karlstedt
Man kan lägga '\0' som sista tecken så termineras strängen.

Postat: 9 januari 2005, 21:29:24
av Rymdninja
ännu lite enklare kan man skriva
char strang[] = "strang\0";

så slipper man ange exakt längd och sånt...eh..jobbigt ;)

Postat: 9 januari 2005, 21:37:31
av Melker
en sträng deklarerad "så här" får väl ändå en nolla som sista tecken, utan att behöva skriva \0 !?

Postat: 9 januari 2005, 21:55:47
av henkebenke
En sträng ("sträng") är alltid null-terminerad. En char-array ({'s', 't', 'r', 'ä', 'n', 'g'}) får man hålla koll på själv. Den enda skillnaden är just att en sträng alltid deklareras "" och därmed automatiskt nulltermineras.

Postat: 9 januari 2005, 22:02:23
av speakman
Om man inte har för behov att ändra i strängen (vilket du inte kan göra med ovan kod heller), så brukar iaf jag använda mig av #defines istället.

Kod: Markera allt

#define OUTTEXT "Tjohejsan"

write(OUTTEXT);
Även här får du automatisk NULL-terminering.

Mvh
speakman

Postat: 9 januari 2005, 22:16:15
av henkebenke
Tycker att det är snyggare att const-deklarera i så fall. Åtminstone om man jobbar med mindre system. Annars kan det "försvinna" en massa programminne utan att man deklarerat några variabler.

Postat: 9 januari 2005, 22:31:31
av sven
hmm.. får omformulera mig lite, på detta viset är det tänkt att det ska fungera

anropa funktionen writestring("text")
ta ut hur många bokstäver "text" innehåller,
antallet bokstäver sätts in i en for loop som i lopar funtionen writechar så många gånger som det finns bokstäver,

för varje gång loopen körs så skickas nästa bokstav i textstringen iväg till funktionen writechar,

i writechar gämförs boksavens ascii nummer mot en teckentabell gjord för lcdn.

har kommit så långt så jag kan använda funtionen writechar('B')
och få ut "B" på lcdn..
men jag vill som sagt kunna skriva writestring("HELLO") och få ut det på lcdn

Postat: 9 januari 2005, 22:37:26
av AndLi

Kod: Markera allt

void writestring(uint8* indata)
{
  while(*indata)
  {
    writechar(*indata);
    indata++;
  }
}
Edit: Ingen som visa den gamla koden för min chef va?? Nu ska stjärnorna sitta rätt :)

Postat: 10 januari 2005, 00:18:06
av speakman
henkebenke skrev:Tycker att det är snyggare att const-deklarera i så fall. Åtminstone om man jobbar med mindre system. Annars kan det "försvinna" en massa programminne utan att man deklarerat några variabler.
Vilken kompilator använder du egentligen?! :P

Mvh
speakman