Pelles C forum
C language => Pocket PC and Smartphone questions => Topic started by: gromit on April 13, 2013, 12:27:01 PM
-
Hi all
In using the following code
i was losing the global string g_catstr
it seems that GetWindowTextLength may return a longer length than is actually in the control
having tried it with
GetDlgItemText(hDlg, ADDPART_PER_COMBO,st_part.perstr,12);
12 being initialised len of st_part.perstr
it works and does not overwrite g_catstr
so what is the best way to obtain len and not have to state a hardcoded figurelike 12
Ansi version
//int clen = GetWindowTextLength(GetDlgItem(hDlg, ADDPART_PER_COMBO));
Wide version
int clen = GetWindowTextLengthW(GetDlgItem(hDlg, ADDPART_PER_COMBO));
if (clen>0)
{
wchar_t xstr[50];
swprintf(xstr, L"%d",clen); //always evaluates to 26 for ansi or wide
CheckMemoryStatus();
MessageBox(g_hwnd,xstr, L"len is", MB_OK | MB_ICONINFORMATION);
MessageBox(g_hwnd,g_catstr, L"In AddEditDlog topOK", MB_OK | MB_ICONINFORMATION);
GetDlgItemText(hDlg, ADDPART_PER_COMBO,st_part.perstr,12);
if i use clen+1 it overwrites g_catstr and shows it as empty
//GetWindowText(GetDlgItem(hDlg, ADDPART_PER_COMBO),st_part.perstr,clen+1);
MessageBox(hDlg,st_part.perstr, L"per string INFO", MB_OK | MB_ICONINFORMATION);
MessageBox(g_hwnd,g_catstr, L"In AddEditPArtsDlog botOK", MB_OK | MB_ICONINFORMATION);
}
-
Hi again
Replying to my own enquiry here
Having, as i stated above, found why i was loosing a global variable.
I have reached the conclusion that it woul be far better if there was a way to simply recall from within the program the length at which the original string was initialised.
So does anyone know of a way to return the length the string was initialised at
i.e wchar_t xstring[50]
i want that 50
i can obviously get it by forming an array of lengths or enum it
but is there a way that is already avaible.
GetIniTialisedStringLen() sort o thing
an odd one i know
But any help Gratefully appreciated
Gromit
-
So does anyone know of a way to return the length the string was initialised at
i.e wchar_t xstring[50]
i want that 50
Do you mean sizeof(xstring)
EDIT: sizeof(xstring)/sizeof(xstring[0])
-
Thankyou for your reply timovjl
Appreciated
struct
{
wchar_t qtystr[40];
wchar_t itemstr[200];
wchar_t sizestr[30];
wchar_t pricestr[12];
wchar_t perstr[12];
}st_part;
clen = sizeof(st_part.perstr);
swprintf(xstr, L"%d",clen);
MessageBox(g_hwnd,xstr, L"hopefully initial len of st_part.perstr is", MB_OK ,MB_ICONINFORMATION);
This returns 24 for len perstr which is is initialised in above struct at 12
???
-
This returns 24 for len perstr which is is initialised in above struct at 12
???
12 times sizeof(wchar_t) equals 24.
-
wchar_t perstr[12];
#define lengthof(x) sizeof(x)/sizeof(x[0])
printf("\n***** static strlen=%i chars ***** \n", lengthof(perstr));
(lengthof is a built-in function for Masm & JWasm - strange that C doesn't know it...)
-
Thanks jj2007
I just tested another string and of course dead right
Length initialised is half the sizeof () returned;
That has cleared up my little mystery for today
I did think i was losing it when perstr was obliterating a global e.g g_catstr
obviously being overwritten .
Big Thanks to all for advice
May the sun shine on your gardens
Its all good fun
:) :) :)
-
Thanks jj2007
You are welcome. However, it seems that timovjl posted the same solution a few minutes before me, so the credits should better go to him ;-)