|
| Kopiering af strenge Fra : Harald |
Dato : 22-02-04 13:11 |
|
Hej
Jeg bruger Borland C++ version 3.1 og har følgende:
int CurDi1=1;
int CurDi2=0;
unsigned char Cmd232Array[5][20];
unsigned char SendLn[50];
int CurAddress=2;
sprintf(SendLn,"!%02X%d3%d3",CurAdress,CurDi1,CurDi2);
denne linie skulle sætte SendLn til værdien: !0210 er det korrekt?
hvis vi nu siger at Cmd232Array[1] har værdien: 2233445566
og Cmd232Array[3] har værdien: 5566778899
så skal jeg ende med at SendLn får værdien:
!0210,12233445566,35566778899
bemærk at der sættes et 1 foran værdien af Cmd232Array[1] og et 3 foran
værdien af Cmd232Array[3]
dvs. koden skal være noget i denne stil:
if (strlen(Cmd232Array[1])>0) {
SendLn = SendLn + ",1" + Cmd232Array[1];
}
if (strlen(Cmd232Array[2])>0) {
SendLn = SendLn + ",2" + Cmd232Array[2];
}
if (strlen(Cmd232Array[3])>0) {
SendLn = SendLn + ",3" + Cmd232Array[3];
}
Jeg er ikke meget inde i C så hvordan gør man dette lettest?
Mvh
HK
| |
Bertel Brander (22-02-2004)
| Kommentar Fra : Bertel Brander |
Dato : 22-02-04 15:59 |
|
Harald wrote:
> Hej
>
> Jeg bruger Borland C++ version 3.1 og har følgende:
>
> int CurDi1=1;
> int CurDi2=0;
> unsigned char Cmd232Array[5][20];
> unsigned char SendLn[50];
> int CurAddress=2;
>
> sprintf(SendLn,"!%02X%d3%d3",CurAdress,CurDi1,CurDi2);
> denne linie skulle sætte SendLn til værdien: !0210 er det korrekt?
>
Jeg ville mene at du får !021303 pga de to tretaller.
> hvis vi nu siger at Cmd232Array[1] har værdien: 2233445566
> og Cmd232Array[3] har værdien: 5566778899
>
> så skal jeg ende med at SendLn får værdien:
> !0210,12233445566,35566778899
>
> bemærk at der sættes et 1 foran værdien af Cmd232Array[1] og et 3 foran
> værdien af Cmd232Array[3]
>
> dvs. koden skal være noget i denne stil:
>
> if (strlen(Cmd232Array[1])>0) {
> SendLn = SendLn + ",1" + Cmd232Array[1];
> }
> if (strlen(Cmd232Array[2])>0) {
> SendLn = SendLn + ",2" + Cmd232Array[2];
> }
> if (strlen(Cmd232Array[3])>0) {
> SendLn = SendLn + ",3" + Cmd232Array[3];
> }
>
Hvis du er sikker på at der er plads nok i SendLn:
char *P = SendLn;
p += sprintf(p,"!%02X%d%d",CurAdress,CurDi1,CurDi2)
for(i = 1; i < 4; i+)
{
if(strlen(Cmd232Array[i]) > 0)
p += sprintf(p, ",%d%s", i, Cmd232Array[i]);
}
/b
| |
Harald (22-02-2004)
| Kommentar Fra : Harald |
Dato : 22-02-04 16:53 |
|
"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:4038c335$0$202$edfadb0f@dread12.news.tele.dk...
> Harald wrote:
> > Hej
> >
> > Jeg bruger Borland C++ version 3.1 og har følgende:
> >
> > int CurDi1=1;
> > int CurDi2=0;
> > unsigned char Cmd232Array[5][20];
> > unsigned char SendLn[50];
> > int CurAddress=2;
> >
> > sprintf(SendLn,"!%02X%d3%d3",CurAdress,CurDi1,CurDi2);
> > denne linie skulle sætte SendLn til værdien: !0210 er det korrekt?
> >
> Jeg ville mene at du får !021303 pga de to tretaller.
Du har ret.
> > hvis vi nu siger at Cmd232Array[1] har værdien: 2233445566
> > og Cmd232Array[3] har værdien: 5566778899
> >
> > så skal jeg ende med at SendLn får værdien:
> > !0210,12233445566,35566778899
> >
> > bemærk at der sættes et 1 foran værdien af Cmd232Array[1] og et 3 foran
> > værdien af Cmd232Array[3]
> >
> Hvis du er sikker på at der er plads nok i SendLn:
>
> char *P = SendLn;
>
> p += sprintf(p,"!%02X%d%d",CurAdress,CurDi1,CurDi2)
>
> for(i = 1; i < 4; i+)
> {
> if(strlen(Cmd232Array[i]) > 0)
> p += sprintf(p, ",%d%s", i, Cmd232Array[i]);
> }
Det virker fint, tak for det. Min kode ser nu sådan ud:
void SendStatus(void)
{ unsigned char SendLn[50];
int i;
char *P = SendLn;
P+=sprintf(P,"!%02X%d%d",CurAddress,CurDi1,CurDi2);
for (i=1;i<5;i++) {
if (strlen(Cmd232Array[i])>0) {
P+=sprintf(P,",%d%s",i,Cmd232Array[i]);
Cmd232Array[i][0]=NULL; // nulstiller
}
}
SendCmdToCom485Str(SendLn); // sender til COM2 (485 port)
}
Jeg nulstiller Cmd232Array[i] ved at sætte [0]=NULL, er det den rigtige måde
at gøre det på?
Ved funktionen strlen får jeg advarslen:
"Call to function 'strlen' with no prototype", hvad betyder det?
Mvh
HK
| |
Bertel Brander (22-02-2004)
| Kommentar Fra : Bertel Brander |
Dato : 22-02-04 17:15 |
|
Harald wrote:
> Jeg nulstiller Cmd232Array[i] ved at sætte [0]=NULL, er det den rigtige måde
> at gøre det på?
NULL er en 0 pointer, og bør kun bruges med pointere, man bruger normalt
'\0' til "nulstille" en streng.
> Ved funktionen strlen får jeg advarslen:
> "Call to function 'strlen' with no prototype", hvad betyder det?
>
Deet betyder at den ikke kan se en prototype for strlen(), det løser
du ved at tilføje en
#include <string.h>
I toppen af filen.
/b
| |
|
|