c programeringsfråga
c programeringsfråga
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?
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
jag får detta medelande:
warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast
warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast
Re: c programeringsfråga
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?
Kod: Markera allt
xbee[i].effektnr[i] = nummer[i];
Senast redigerad av E85 29 augusti 2010, 16:21:41, redigerad totalt 1 gång.
Re: c programeringsfråga
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;
}
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.
Re: c programeringsfråga
Jo, eller (Jag har inte tid att vidareutveckla just nu)
Kod: Markera allt
xbee[i].effektnr[0] = nummer[i];
xbee[i].effektnr[1] = '\0';Re: c programeringsfråga
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..)
Headerfil för strcpy() saknas.
Byt .. ,nummer);till .. ,&nummer); (kopierar 1234 123 12 1 osv..)
Re: c programeringsfråga
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];
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
> 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:ger flöljande utskriftvilket 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)
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);
}
}Kod: Markera allt
400
1234567
234567
34567
4567
567
67
Re: c programeringsfråga
Varför inte bara
for (i=0 ; i<6 ; i++) {
xbee.effektnr[0] = '1' + i;
xbee.effektnr[1] = '\0';
}
for (i=0 ; i<6 ; i++) {
xbee.effektnr[0] = '1' + i;
xbee.effektnr[1] = '\0';
}
Re: c programeringsfråga
Ja nu börjar det likna något. Ellerom man definierar info somså sparar man 19 byte per info-element. Men det beror ju lite på vilken info man vill ha i "info" 
Kod: Markera allt
for (i=0 ; i<6 ; i++) {
xbee[i].effektnr = i+1;
}Kod: Markera allt
typedef struct
{
uint8_t effektnr;
}info;
Re: c programeringsfråga
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
EDIT: skrev info, menade effektnr
Re: c programeringsfråga
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
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;
}
}
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;
}
}
