webForumDet fria alternativet

Denna kod i c/c++

C/C++

8 svar · 521 visningar · startad av Alpha II

Medlem sedan maj 20002 993 inlägg
Frågan#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()) + ']');

Medlem sedan aug. 20021 752 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

Medlem sedan juni 200010 432 inlägg
#3

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

Medlem sedan maj 20021 466 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);
Medlem sedan juni 200010 432 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?

Medlem sedan aug. 20021 752 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

Medlem sedan feb. 20002 300 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];
Medlem sedan aug. 20021 752 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

Medlem 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

270 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)