webForumDet fria alternativet

Denna kod i c/c++

8 svar · 521 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 579 inlägg
#1

I delphi kan jag sätta fönster titeln på detta sätt, eller, hur jag sätter titeln vet jag men jag vet inte hur jag konverterar int till en sträng osv.

Vad jag vill göra fast i c är detta:

SetWindowText(hWnd, WND_TITLE + ' [FPS: ' + IntToStr(FPS.GetFPS()) + ']');

ViktorMedlem sedan aug. 20021 710 inlägg
#2

C++ kod

char *buffer=new char[100];
sprintf(buffer,"%s [FPS: %d]",WND_TITLE,FPS.GetFPS());
SetWindowText(hWnd,buffer);
delete buffer;

sprintf ersätter %s med en sträng, WND_TITLE, och %d ersätts med ett decimal tal, FPS.GetFPS(). Allt bakas in i char arrayen buffer.
Du kan även använa itoa om du vill, men då får du inte en färdigbakad sträng med text också. sprintf är grymt användbar.

/Viktor

PeWMedlem sedan juni 20006 839 inlägg
#3

Man måste inte allokera minne på heapen för detta ;)

Marcus EMedlem sedan maj 20021 294 inlägg
#4

PeW skrev:

Man måste inte allokera minne på heapen för detta ;)

Och då skadar det aldrig att berätta vad man istället kan göra.

char buffer[100];

Tänk på att strängen inte kan vara längre än 100 tecken nu. Om du inte vill bry dig om antalet tecken, kan du t.ex. använda CString om du använder MFC/ATL.

#include <atlstr.h>

CString buffer;
buffer.Format("%s [FPS: %d]",WND_TITLE,FPS.GetFPS());
SetWindowText(hWnd,buffer);
PeWMedlem sedan juni 20006 839 inlägg
#5

Och då skadar det aldrig att berätta vad man istället kan göra.

Sant.. men det var väl ganska givet vad som menades?

ViktorMedlem sedan aug. 20021 710 inlägg
#6

Marcus E skrev:

Tänk på att strängen inte kan vara längre än 100 tecken nu.

Kan en char array bara vara 100 tecken? varför?

/Viktor

PhorpherMedlem sedan feb. 20002 059 inlägg
#7

Viktor skrev:

Marcus E skrev:

Tänk på att strängen inte kan vara längre än 100 tecken nu.

Kan en char array bara vara 100 tecken? varför?

/Viktor

Nej. Givetvis kan en char-array vara större än 100 tecken. Men i ditt och Marcus exempel så har ni använt just 100. Skulle ju lika gärna kunna vara 42 eller 10 000 tecken.

Det Marcus menar är att i era exempel så får man se till att inte skriva mer än 100 tecken till arrayen för då börjar man härja runt på minne som inte är allokerat.

Ett tips är att vid sånahär deklarationer använda en #define för att enkelt kunna ändra storleken senare.

#define    MAX_BUFFER_SIZE      100

...

char buffer[MAX_BUFFER_SIZE];
ViktorMedlem sedan aug. 20021 710 inlägg
#8

Phorpher skrev:

Nej. Givetvis kan en char-array vara större än 100 tecken. Men i ditt och Marcus exempel så har ni använt just 100. Skulle ju lika gärna kunna vara 42 eller 10 000 tecken.

ok, blev lite orolig att jag hade missat något grundläggande i C++ :)

/Viktor

ollelMedlem sedan mars 20031 inlägg
#9

om man använder
char *buffer=new char[100];

så måste man ta bort med delete[]

delete[] buffer;

olle

Genererad på 362 ms · cache AV · v20260730165559-full.f96bc7eb