Re: stl string find issue
Sorry. These are microsoft macros. They're for unicode awareness, and
look something like this:
#ifdef UNICODE
#define _T L
#define TCHAR WCHAR
#else
#define _T
#define TCHAR CHAR
#endif
where you see std::string in my code, it actually says TSTRING, which
is either std::string or std::wstring depending on UNICODE usage. I
just eliminated that for simplicity and forgot about the other ones.
Thanks for your suggestion. It works, but it doesn't change the
contents of the original vector, so I'd have to make a string copy,
send it to the clean function, then copy that back to vector format.
Ugly, but it would work.
Thomas J. Gritzan wrote:
PaulH schrieb:
I have a function that is stripping off some XML from a configuration
file. But, when I do a search for the pieces I want to strip, the
std::string::find() function always returns std::string::npos (-1).
I can print out the config string at the beginning of CleanCfgFile(),
and the strings are there exactly the way I'm looking for them. So, the
question is, what am I doing wrong?
Function()
{
std::vector<TCHAR> configString(bufLen);
//populate configString....
CleanCfgFile(reinterpret_cast<std::string*>(&configString));
//...
}
bool CleanCfgFile(std::string *cfgFile)
{
TCHAR XMLHeader[] = _T("<?xml");
What is TCHAR? What is _T()?
std::string::size_type start = cfgFile->find(XMLHeader);
//start == std::string::npos!
//...
}
Why am I using a vector and not a string in Function(), you ask? It's
just easier for the rest of the program. I could probably change it if
that's the problem... I just thought you could cast between the two and
be fine.
What makes you think that you can cast between them? You cannot. IMHO,
reinterpret_cast used in this way invokes undefined behaviour.
Try it this way:
CleanCfgFile(std::string(configString.begin(), configString.end()));
bool CleanCfgFile(const std::string& cfgFile)
{
// ...
}
Thomas