Удвоить до 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;
}

4 ответа

Решение

Почему вы не возвращаете строку из функции вместо 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()вы, по сути, вызываете неопределенное поведение.

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

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

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

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

Более подробную информацию об этом можно найти здесь.

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

R = 10;
std::cout << std::to_string(R) <<std::endl;
Другие вопросы по тегам