Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过函数将双精度转换为常量字符* R=10; LPCSTR-cs; 字符串s; 细流ss; 为什么不从函数返回一个字符串而不是char*? 比如: const字符串doubleToStr(双x){ 细流ss; ss_C++_Winapi_Double_Lpcstr - Fatal编程技术网

C++ 通过函数将双精度转换为常量字符* R=10; LPCSTR-cs; 字符串s; 细流ss; 为什么不从函数返回一个字符串而不是char*? 比如: const字符串doubleToStr(双x){ 细流ss; ss

C++ 通过函数将双精度转换为常量字符* R=10; LPCSTR-cs; 字符串s; 细流ss; 为什么不从函数返回一个字符串而不是char*? 比如: const字符串doubleToStr(双x){ 细流ss; ss,c++,winapi,double,lpcstr,C++,Winapi,Double,Lpcstr,从外观上看,返回值实际上不需要是char*——毕竟您只是在输出返回值——这意味着您可以使用字符串。 (也就是说,当然它需要是一个char*是有原因的,为了简洁起见,您省略了它?) 您不必自己将double转换为字符串,而是可以使用string类,它有一个方法“std::to_string()”,可以转换所有数字类型,包括double 更多关于这方面的信息可以找到 但是在你的情况下基本的用法是 const string doubleToStr(double x){ stringstream s

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

您不必自己将double转换为字符串,而是可以使用string类,它有一个方法“std::to_string()”,可以转换所有数字类型,包括double

更多关于这方面的信息可以找到

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

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

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

std::coutVariable
string s
是函数
doubletopstr
中的局部变量

在运行期间,一旦“退出”此函数,此变量将被销毁

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


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

什么类型的R?您想将其用作函数的参数吗?您到底想实现什么,问题是什么?可能与您正在寻找的函数重复。我已经阅读了您的帖子,我真的不知道您在尝试什么你不知道如何将const char*传递给函数还是什么?可能的重复我认为这不是他的问题的正确答案。他想得到
const char*
作为返回类型,所以他期待这样的解决方案。jap我想要一个const char*返回如果你真的想要一个const char*,那么你可以在con中为它分配内存转换函数并从调用者那里释放它(这是C,不是C++)@newandlost:没有(合理的)方法可以做到这一点。只需返回
字符串
,如果调用者出于某种原因确实需要指针,就让他们使用
C_str()
。(可选的方法是静态数组,它将在下次调用时意外地被覆盖;或者是动态数组,它必然会导致内存泄漏。如果你重视自己的理智,就不要这样做。)您不应该使返回类型为
const
;当您将其分配给
s
.ja时,它会阻止移动语义,因为它最终用于接受LPCSTR的WIN32函数
R = 10;
std::cout << std::to_string(R) <<std::endl;
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;
}
const string doubleToStr(double x){
  stringstream ss;
  ss << x;
  return ss.str();
}

R = 10;
string s;
s = doubleToStr(R);
cout << s << endl;
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;
CreateWindow("STATIC", cs, WS_VISIBLE | WS_CHILD | SS_RIGHT, xSC, top, bS, hEaS,
    hwnd, NULL, hInstance, NULL);