Sida 1 av 2
c programeringsfråga
Postat: 29 augusti 2010, 15:52:05
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?
Re: c programeringsfråga
Postat: 29 augusti 2010, 15:54:58
av danielr112
Vad funkar inte? Vad för fel får du?
Re: c programeringsfråga
Postat: 29 augusti 2010, 16:05:36
av dude
jag får detta medelande:
warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast
Re: c programeringsfråga
Postat: 29 augusti 2010, 16:18:46
av E85
Kanske funkar om du byter ut strcpy-raden mot
Fast det blir väldigt märkligt. Är det verkligen en array "effektnr" du vill ha i varje struct?
Re: c programeringsfråga
Postat: 29 augusti 2010, 16:20:43
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;
}
Re: c programeringsfråga
Postat: 29 augusti 2010, 16:22:27
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)
Re: c programeringsfråga
Postat: 29 augusti 2010, 16:38:42
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..)
Re: c programeringsfråga
Postat: 29 augusti 2010, 16:47:15
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];
Re: c programeringsfråga
Postat: 29 augusti 2010, 16:53:55
av blueint
Länkad-lista.
Antal element nummer + array.
Re: c programeringsfråga
Postat: 29 augusti 2010, 20:41:13
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
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)
Re: c programeringsfråga
Postat: 29 augusti 2010, 20:48:56
av nablaman
Varför inte bara
for (i=0 ; i<6 ; i++) {
xbee.effektnr[0] = '1' + i;
xbee.effektnr[1] = '\0';
}
Re: c programeringsfråga
Postat: 29 augusti 2010, 21:01:07
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
så sparar man 19 byte per info-element. Men det beror ju lite på vilken info man vill ha i "info"

Re: c programeringsfråga
Postat: 29 augusti 2010, 21:04:57
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
Re: c programeringsfråga
Postat: 29 augusti 2010, 21:11:01
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...

)
Re: c programeringsfråga
Postat: 29 augusti 2010, 21:11:26
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;
}
}