按函数加倍到const char *

时间:2014-08-08 11:29:12

标签: c++ winapi double lpcstr

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 个答案:

答案 0 :(得分:2)

为什么不从函数返回字符串而不是char *? 像:

const string doubleToStr(double x){
  stringstream ss;
  ss << x;
  return ss.str();
}

R = 10;
string s;
s = doubleToStr(R);
cout << s << endl;

如果你真的需要一个char *,你可以使用&#39; s.c_str()&#39;在上面的代码之后

答案 1 :(得分:2)

变量string s是函数doubleToLPSTR中的局部变量。

在运行期间,一旦你出现了&#34;这个函数,这个变量被破坏了。

因此,使用return s.c_str(),您实际上是在调用未定义的行为。

任何尝试访问返回地址的结果都是不一致的。

答案 2 :(得分:0)

从它的外观来看,返回值实际上并不需要是一个char * - 你只是输出返回值 - 这意味着你可以使用一个字符串。 (那当然有一个原因,它需要成为一个你为了简洁省略的char *?)

您可以使用具有方法&#34; std :: to_string()&#34;的String类,而不必将double转换为字符串。它可以转换所有数字类型,包括double。

有关详细信息,请访问here

但你案件的基本用法是......

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

答案 3 :(得分: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);