c programeringsfråga

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
dude
Inlägg: 147
Blev medlem: 6 juli 2007, 17:39:33
Ort: Solna

c programeringsfråga

Inlägg av dude »

hejsan

jag har en c programeringsfråga:

char nummer[20]="1234567";

for(i=0; i<6; i++){
strcpy(xbee.effektnr,nummer); ///har blir det fel
}

////////////

typedef struct
{
char effektnr[20];
}info;
extern info xbee[20];

detta funkar inte.
det jag försöker göra är att spara undan "1" i effektnr[1] och "2" i effektnr[2] osv med en forloop.
hur kan jag göra detta?
nån som kan?
danielr112
Inlägg: 8092
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: c programeringsfråga

Inlägg av danielr112 »

Vad funkar inte? Vad för fel får du?
dude
Inlägg: 147
Blev medlem: 6 juli 2007, 17:39:33
Ort: Solna

Re: c programeringsfråga

Inlägg av dude »

jag får detta medelande:

warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: c programeringsfråga

Inlägg av E85 »

Kanske funkar om du byter ut strcpy-raden mot

Kod: Markera allt

xbee[i].effektnr[i] = nummer[i];
Fast det blir väldigt märkligt. Är det verkligen en array "effektnr" du vill ha i varje struct?
Senast redigerad av E85 29 augusti 2010, 16:21:41, redigerad totalt 1 gång.
rehnmaak
Inlägg: 2204
Blev medlem: 13 december 2005, 01:43:41

Re: c programeringsfråga

Inlägg av rehnmaak »

nummer blir en char (dvs ett tal)

gör en pekare istället &nummer så borde det fungera utan kompileringsfel. Men jag förstår inte riktigt vad din funktion gör men du har nog koll på det.

EDIT: läste inte sista raderna i ditt inlägg.

gör såhär:

memset(xbee,0,sizeof(xbee));
for(i=0;i<6;i++)
{
xbee.effektnr[0]=nummer;
}
Senast redigerad av rehnmaak 29 augusti 2010, 16:27:17, redigerad totalt 1 gång.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: c programeringsfråga

Inlägg av snigelen »

Jo, eller

Kod: Markera allt

xbee[i].effektnr[0] = nummer[i];
xbee[i].effektnr[1] = '\0';
(Jag har inte tid att vidareutveckla just nu)
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: c programeringsfråga

Inlägg av blueint »

Du har inte deklarerat xbee endast till vad det är men inget minnesutrymmer för den.
Headerfil för strcpy() saknas.
Byt .. ,nummer);till .. ,&nummer); (kopierar 1234 123 12 1 osv..)
dude
Inlägg: 147
Blev medlem: 6 juli 2007, 17:39:33
Ort: Solna

Re: c programeringsfråga

Inlägg av dude »

oj tack för alla svar.

ska genast experimentera lite och kolla vilken som funkar bäst.

kan förklara vad det hela handlar om:
det jag hade tänkt bygga är en handkontroll som ska kunna få kontakt med ett antal mottagare.
när handkontrollen får kontakt/tappar kontakt med de olika mottagarna så ska menysystemet dynamiskt lägga till eller ta bort hittade/tappade mottagare.
informationen från de olika mottagarna ska ligga i handkontrollens minne i en struct.
den delen som jag jonnade med nu var för att lägga till mottagarna dynamiskt i menysystemet.


så i slutändan kommer det se ut ungefär såhär hade jag tänkt.
jag vet inte om man kan dynamiskt skapa structurer såhär medans handkontrollen används. nån som vet? eller är det omöjligt???


for(i=0; i<mottagare; i++){
xbee.effektnr[0] = effektnummer;
//annan info här
}

/////////////////////////////
typedef struct
{
char effektnr[20];
//annan info här
}info;
extern info xbee[mottagare];
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: c programeringsfråga

Inlägg av blueint »

Länkad-lista.
Antal element nummer + array.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: c programeringsfråga

Inlägg av snigelen »

> Du har inte deklarerat xbee endast till vad det är men inget minnesutrymmer för den.

Han påstår att den finns externt definierad, det får vi väl ändå tro på.

> Headerfil för strcpy() saknas.

Jo i citeringen ovan, men det är nog med i det program han kompilerar. (annars borde det väl gnällas för att första argumentet inte är en int?).

> Byt .. ,nummer);till .. ,&nummer); (kopierar 1234 123 12 1 osv..)

Jo det kan man ju göra (well, jag förstår vad du menar, men det blir "tvärt om")

Man kan ju testa. Detta program:

Kod: Markera allt

#include <stdio.h>
#include <string.h>

typedef struct
{
	char effektnr[20];
}info;
//extern
info xbee[20];

int main() {
	int i;
	char nummer[20]="1234567";

	printf("%d\n\n", sizeof(xbee));
	for(i=0; i<6; i++){
		strcpy(xbee[i].effektnr, &nummer[i]);
		printf("%s\n", xbee[i].effektnr);
	}
}
ger flöljande utskrift

Kod: Markera allt

400

1234567
234567
34567
4567
567
67
vilket väl var vad jag förväntade mig. (Men inget av de givna förslagen är troligtvis rätt sätt att lösa problemet)
Användarvisningsbild
nablaman
Inlägg: 480
Blev medlem: 30 juli 2010, 17:43:07
Ort: Lund
Kontakt:

Re: c programeringsfråga

Inlägg av nablaman »

Varför inte bara

for (i=0 ; i<6 ; i++) {
xbee.effektnr[0] = '1' + i;
xbee.effektnr[1] = '\0';
}
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: c programeringsfråga

Inlägg av snigelen »

Ja nu börjar det likna något. Eller

Kod: Markera allt

for (i=0 ; i<6 ; i++) {
   xbee[i].effektnr = i+1;
}
om man definierar info som

Kod: Markera allt

typedef struct
{
   uint8_t effektnr;
}info;
så sparar man 19 byte per info-element. Men det beror ju lite på vilken info man vill ha i "info" :wink:
Användarvisningsbild
nablaman
Inlägg: 480
Blev medlem: 30 juli 2010, 17:43:07
Ort: Lund
Kontakt:

Re: c programeringsfråga

Inlägg av nablaman »

Ja, båda lösningarna är korrekta. Den första fungerar om man vill ha effektnr som en sträng, och din om man vill ha effektnr som ett heltal.

EDIT: skrev info, menade effektnr
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: c programeringsfråga

Inlägg av snigelen »

Ja såklart. Jag menade bara att du var på rätt spår för att få till en lösning, och att kanske nästa steg var att fundera på om det behövs 20 byte i varje effktnr, eller om det räcker med ett heltal, 0-255.(oj vad jag fick tid över när svärfar åkt hem och barnet sover. Nej nu får jag sluta babbla... :))
dude
Inlägg: 147
Blev medlem: 6 juli 2007, 17:39:33
Ort: Solna

Re: c programeringsfråga

Inlägg av dude »

jag testade detta efter era tips och det verkar fungera ganska bra.(nedan)
det enda är att det blir 01,02 osv istället för 1,2 osv men det kan jag väl leva med.

precis som nån nämde innan så är detta endast en del av stort program och h filer, annan kod och så vidare har jag inte tagit med för att inte göra det för stort och förvirrande för er.

tack så mycket för all hjälp allihopa!!

snigelen:haha jo jag vet. hade inte tänkte ta och dra ner på den till 3 stycken.
då kan jag ha 999 stycken effektenheter.
men det kan inte vara en int som du antydde eftersom det måste vara en 3 char eftersom det ska skrivas ut på LCD displayen och det kan inte vara int.

en annan fråga dock som jag nämde innan. kan man skriva så här eller??:

typedef struct
{
char effektnr[20];
}info;
extern info xbee[global int här!!];



/////////////////////////denna kod skrev jag ::
int i;
int w=0;
char effektnummer[]="0102030405060708091011121314151617181920";

for(i=0; i<antaleffektenheter; i++){
strcpy(xbee.kod, "E01A01");
xbee.effektnr[0] = effektnummer[w];
xbee.effektnr[1] = effektnummer[(w+1)];
xbee.effektnr[2] = '\0';
w=w+2;
}
}
Skriv svar