R=10;
LPCSTR cs;
string s;
stringstream ss;
ss<<R;
s = ss.str();
cout << cs <<endl;
Даст мне консольный вывод 10, как и должно быть.
Теперь я хотел поместить это в функцию:
const char * doubleToLPSTR(double x){
string s;
stringstream ss;
ss << x;
s = ss.str();
return s.c_str();
}
Но
R = 10;
LPCSTR cs;
string s;
cs = doubleToLPSTR(R);
cout << cs << endl;
Возврат не работает …. почему ???
Спасибо за вашу помощь, как это?
const char * doubleToLPSTR(double x){
const int size = 20;
char *cs = new char[size];
string s;
stringstream ss;
ss << x;
s = ss.str();
const char * tempAr = s.c_str();for (int i = 0; i < size; i++){
cs[i] = tempAr[i];
}
return cs;
}
почему бы вам не вернуть строку из функции вместо char *?
лайк:
const string doubleToStr(double x){
stringstream ss;
ss << x;
return ss.str();
}
R = 10;
string s;
s = doubleToStr(R);
cout << s << endl;
и если вам действительно нужен символ *, вы можете использовать ‘s.c_str ()’ после кода выше
переменная string s
является локальной переменной в функции doubleToLPSTR
,
Во время выполнения, когда вы выходите из этой функции, эта переменная уничтожается.
Так с return s.c_str()
вы, по сути, вызываете неопределенное поведение.
Результат любой попытки получить доступ к возвращенному адресу будет противоречивым.
Судя по всему, возвращаемое значение не обязательно должно быть символом * — вы просто выводите возвращаемое значение в конце концов — что означает, что вы можете использовать строку.
(То есть, конечно, есть причина, по которой это должен быть символ *, который вы опущены для краткости?)
Вместо того, чтобы самостоятельно преобразовывать double в строку, вы можете использовать класс String, который имеет метод «std :: to_string ()», который может преобразовывать все числовые типы, включая double.
Больше информации об этом можно найти Вот.
Но основное использование в вашем случае будет …
R = 10;
std::cout << std::to_string(R) <<std::endl;
const char * doubleToLPSTR(double x){
const int size = 20;
char *cs = new char[size];
string s;
stringstream ss;
ss << x;
s = ss.str();
const char * tempAr = s.c_str();for (int i = 0; i < size; i++){
cs[i] = tempAr[i];
}
return cs;
}
И тогда в программе:
R = 10;
const char *cs = doubleToLPSTR(R);
cout << cs << endl;
И мне это нужно, потому что я нуждаюсь в LPCSTR в
CreateWindow("STATIC", cs, WS_VISIBLE | WS_CHILD | SS_RIGHT, xSC, top, bS, hEaS,
hwnd, NULL, hInstance, NULL);