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;
}
答案 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);