Following code works fine, when compiled with VS 6.0, but not anymore when compiled in .NET. What's wrong here, I can't see it by myself?
arrString content will be garbage with .net compilation, but when compiled with 6.0 it contains string from Vector (that's how I want it to work).
std::vector<std::string> Vector;
..
void MyClass::DoThis(std::vector<std::string> Vector)
{
const char *arrString[10];
for (int i = 0; i < 10 && i < Vector.size(); i++)
arrString[i] = Vector[i].c_str();
When I debug these, I see that the problem is with my array of const char*. Const char* items seems to change, when std:string changes. For example,
Vector[0].c_str = "dog"
arrString[0]="dog"
Vector[1].c_str = "cat"
arrString[0]="cat" --> this is the problem, why it happens?
This happens only with .net, with 6.0 remains arrString[0] = "dog"
Ary Sulistyono - 31 Aug 2004 09:05 GMT
Using VS.Net 2003, I don't see the problem you're seeing.
void
MyChass::DoSomething(vector<string> v)
{
const char *arr[10];
for (int i = 0; i < 10 && i < v.size(); i++)
{
arr[i] = v[i].c_str();
}
// this will print "dog" and "cat" correctly
for (int j=0; j < 10 && j < v.size(); j++)
{
cout << "arr[" << j << "] = " << arr[j] << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
MyChass m;
std::string s1 = "dog";
std::string s2 = "cat";
std::vector<std::string> v;
v.push_back(s1);
v.push_back(s2);
m.DoSomething(v);
return 0;
}
Ary Sulistyono
> Following code works fine, when compiled with VS 6.0, but not anymore when compiled in .NET. What's wrong here, I can't see it by myself?
> arrString content will be garbage with .net compilation, but when compiled with 6.0 it contains string from Vector (that's how I want it to work).
[quoted text clipped - 22 lines]
>
> <Id>FCPH9ioddE2faW+WEvjukQ==</Id
Vladimir Nesterovsky - 31 Aug 2004 09:34 GMT
> Following code works fine, when compiled with VS 6.0, but not anymore when compiled in .NET. What's wrong here, I can't see it by myself?
> arrString content will be garbage with .net compilation, but when compiled with 6.0 it contains string from Vector (that's how I want it to work).
[quoted text clipped - 10 lines]
>
> When I debug these, I see that the problem is with my array of const char*. Const char* items seems to change, when std:string changes. For
example,
> Vector[0].c_str = "dog"
> arrString[0]="dog"
> Vector[1].c_str = "cat"
> arrString[0]="cat" --> this is the problem, why it happens?
> This happens only with .net, with 6.0 remains arrString[0] = "dog"
std::string owns memory returned with c_str(). Destiny of this memory is
implementation defined when string is changed.

Signature
Vladimir Nesterovsky
e-mail: vladimir@nesterovsky-bros.com
home: www.nesterovsky-bros.com