-2
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

4 回答 4

2

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

在运行时,一旦你“退出”这个函数,这个变量就会被销毁。

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

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

于 2014-08-08T11:51:05.603 回答
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*,你可以在上面的代码之后使用's.c_str()'

于 2014-08-08T11:39:44.073 回答
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);
于 2014-08-08T12:00:53.410 回答
0

从表面上看,返回值实际上并不需要是 char* - 毕竟您只是在输出返回值 - 这意味着您可以使用字符串。(也就是说,为了简洁起见,它需要是一个 char* 是有原因的吗?)

您不必自己将双精度转换为字符串,而是可以使用具有方法“std::to_string()”的字符串类,该方法可以转换所有数字类型,包括双精度。

更多信息可以在这里找到。

但在你的情况下,基本用法是......

R = 10;
std::cout << std::to_string(R) <<std::endl;
于 2014-08-08T11:44:42.673 回答