/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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


Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste