удвоить до const char * по функции

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;
}

-2

Решение

почему бы вам не вернуть строку из функции вместо 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 ()’ после кода выше

2

Другие решения

переменная string s является локальной переменной в функции doubleToLPSTR,

Во время выполнения, когда вы выходите из этой функции, эта переменная уничтожается.

Так с return s.c_str()вы, по сути, вызываете неопределенное поведение.

Результат любой попытки получить доступ к возвращенному адресу будет противоречивым.

2

Судя по всему, возвращаемое значение не обязательно должно быть символом * — вы просто выводите возвращаемое значение в конце концов — что означает, что вы можете использовать строку.
(То есть, конечно, есть причина, по которой это должен быть символ *, который вы опущены для краткости?)

Вместо того, чтобы самостоятельно преобразовывать double в строку, вы можете использовать класс String, который имеет метод «std :: to_string ()», который может преобразовывать все числовые типы, включая double.

Больше информации об этом можно найти Вот.

Но основное использование в вашем случае будет …

R = 10;
std::cout << std::to_string(R) <<std::endl;
0

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);
0
По вопросам рекламы [email protected]