双倍到常量字符 * 按功能


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;
}
为什么

不从函数中返回一个字符串而不是 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(('

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

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

因此,对于return s.c_str(),您本质上是在调用未定义的行为。

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

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

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

可以在此处找到有关此内容的更多信息。

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

R = 10;
std::cout << std::to_string(R) <<std::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;
}

然后在程序中:

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

最新更新