/ 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
Button%i
Fra : Ukendt


Dato : 03-05-02 21:32

Hej hej!
Jeg skal have lavet en funktion, der alt efter hvilken værdi knap_nr har,
gør ting og sager ved en knap. Koden under virker ikke, hvad skal jeg så
gøre?


---
void tick(char retning, int antal_tick, char knap_nr)
{
char buffer[7];
sprintf(buffer,"Button%i->Left",knap_nr);

buffer->Left = buffer->Left + 25*antal_tick;
}
---
-Anders



 
 
Ukendt (03-05-2002)
Kommentar
Fra : Ukendt


Dato : 03-05-02 22:02

Ok, har fundet den første fejl. Det skal naturligvis være %s...

> Hej hej!
> Jeg skal have lavet en funktion, der alt efter hvilken værdi knap_nr har,
> gør ting og sager ved en knap. Koden under virker ikke, hvad skal jeg så
> gøre?
>
>
> ---
> void tick(char retning, int antal_tick, char knap_nr)
> {
> char buffer[7];
> sprintf(buffer,"Button%i->Left",knap_nr);
>
> buffer->Left = buffer->Left + 25*antal_tick;
> }
> ---
> -Anders
>
>



Mogens Hansen (03-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 03-05-02 22:16


"König" <knep> wrote

> Ok, har fundet den første fejl. Det skal naturligvis være %s...

Brug klassen "std::ostringstream" i stedet for "sprintf" - så sørger
compileren for at det er den rigtige type.
Det er skal iøvrigt _ikke_ være %s.

Venlig hilsen

Mogens Hansen



Ukendt (03-05-2002)
Kommentar
Fra : Ukendt


Dato : 03-05-02 23:06


> Det er skal iøvrigt _ikke_ være %s.
Nej ikke s, en lille trykfejl. %c

-Anders



Mogens Hansen (03-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 03-05-02 22:10


"König" <knep> wrote

> Jeg skal have lavet en funktion, der alt efter hvilken værdi knap_nr har,
> gør ting og sager ved en knap. Koden under virker ikke, hvad skal jeg så
> gøre?
>

Hvad havde du forventet den ville gøre ?
Det du måske skal gøre, er at bruge tid på at lære nogle grundliggende C++
programmering først, og vente lidt med at lave grafiske brugergrænseflader.
På den måde har de ikke så mange ting samtidigt.

>
> ---
> void tick(char retning, int antal_tick, char knap_nr)
> {
> char buffer[7];
> sprintf(buffer,"Button%i->Left",knap_nr);
>

Hvor stor er buffer ?
Hvor mange tegn forventer du at sprintf skriver i buffer ? (hint: flere end
der er plads til)
Hvorfor bruger du lav-niveau funktioner som sprintf, der giver mulighed for
buffer-overrun, når mere sikre alternativer findes ? (hint: se klassen
std::ostringstream)

> buffer->Left = buffer->Left + 25*antal_tick;

Hvilken type er buffer ?


Venlig hilsen

Mogens Hansen



Byrial Jensen (04-05-2002)
Kommentar
Fra : Byrial Jensen


Dato : 04-05-02 07:48

Mogens Hansen <mogens_h@dk-online.dk> skrev:
> Det du måske skal gøre, er at bruge tid på at lære nogle grundliggende C++
> programmering først, og vente lidt med at lave grafiske brugergrænseflader.
> På den måde har de ikke så mange ting samtidigt.

Det kunne jo være at den anonyme König prøver på at programmere i C,
men i det fald gælder dine kommentarer og forslaget om at lære det
grundliggende først alligevel.

> Hvorfor bruger du lav-niveau funktioner som sprintf, der giver mulighed for
> buffer-overrun, når mere sikre alternativer findes ? (hint: se klassen
> std::ostringstream)

Hvis det er et C-program, er snprintf() et lidt sikrere alternativ.
(Dog ikke mere sikkert end at programmeret stadig kan gå ned ved
fejl i formatstrengen).

Mogens Hansen (04-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 04-05-02 08:55


"Byrial Jensen" <bjensen@nospam.dk> wrote in message
news:slrnad6ttt.21j.bjensen@ask.ask...
> Mogens Hansen <mogens_h@dk-online.dk> skrev:
> > Det du måske skal gøre, er at bruge tid på at lære nogle grundliggende
C++
> > programmering først, og vente lidt med at lave grafiske
brugergrænseflader.
> > På den måde har de ikke så mange ting samtidigt.
>
> Det kunne jo være at den anonyme König prøver på at programmere i C,
> men i det fald gælder dine kommentarer og forslaget om at lære det
> grundliggende først alligevel.
>

Hvis man antager at König er identisk med den König, der de seneste dage har
stillet en række spørgsmål, så kan man se at König anvender Borland
C++Builder og VCL.
Det kode som König postede i denne tråd (f.eks. "Button%i->Left") tyder på
at det stammer fra noget VCL programmering.
VCL _er_ C++ med nogle sprog extensions (når det ikke er Object Pascal).

Det er ikke ualmindeligt, men ikke optimalt, at anvende mindre sikre
konstruktioner, på trods af at der findes enklere og sikrere alternativer i
C++. Det var det jeg påpegede.

Venlig hilsen

Mogens Hansen



Byrial Jensen (04-05-2002)
Kommentar
Fra : Byrial Jensen


Dato : 04-05-02 10:29

Mogens Hansen <mogens_h@dk-online.dk> skrev:
> "Byrial Jensen" <bjensen@nospam.dk> wrote in message
>>
>> Det kunne jo være at den anonyme König prøver på at programmere i C,
>> men i det fald gælder dine kommentarer og forslaget om at lære det
>> grundliggende først alligevel.
>
> Hvis man antager at König er identisk med den König, der de seneste dage har
> stillet en række spørgsmål, så kan man se at König anvender Borland
> C++Builder og VCL.

O.k., jeg havde ikke lagt mærke til at det var den samme anonyme
person som stillede de andre spørsmål.

> Det kode som König postede i denne tråd (f.eks. "Button%i->Left") tyder på
> at det stammer fra noget VCL programmering.
> VCL _er_ C++ med nogle sprog extensions (når det ikke er Object Pascal).

Javel ja, jeg kunne ikke genkende noget i den postede kode, og uden
det kendskab kunne det for så vidt lige så godt være C-kode.

> Det er ikke ualmindeligt, men ikke optimalt, at anvende mindre sikre
> konstruktioner, på trods af at der findes enklere og sikrere alternativer i
> C++. Det var det jeg påpegede.

Jeg er helt enig i dette, jeg kunne bare ikke se at det drejede sig
om (forsøg på at lave) C++-kode.

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste