【发布时间】:2015-11-30 11:29:25
【问题描述】:
我正在尝试将 char[] 转换为 std::string。我到处寻找,我找到了相同的答案,那个字符串有一个构造函数做这个确切的事情。 问题是,它对我不起作用。
这是我的代码:
std::string getKey(double xTop,double yTop,double zTop,double xBottom,double yBottom,double zBottom,double zGridPoint)
{
std::string outfile = correctPath(getCurrentDirectory().toStdString()) + "keys.txt";
FILE *f;
f= fopen(outfile.c_str(),"a");
char buffer[100];
double s;
if((zBottom-zTop) ==0)
{
sprintf(buffer,"%e %e %e", xTop, yTop, zTop);
}else
{
s=(zGridPoint - zTop) / (zBottom - zTop);
sprintf(buffer,"%e %e %e",xTop+ s*(xBottom - xTop), yTop+ s*(yBottom - yTop), zGridPoint);
}
std::string ret (buffer);
fprintf(f,"buffer: %s ; ret: %s\n",buffer,ret);
fclose(f);
return ret;
}
fprintf 用于检查我的字符串是否正确,但事实并非如此。 buffer 打印正确,但 ret 给了我一些奇怪的迹象,我在这里既不能阅读也不能重现。
有人发现我的代码有问题吗?
谢谢
【问题讨论】:
-
尝试 fprintf(f,"buffer: %s ; ret: %s\n",&buffer,ret);
-
%s不能与std::string一起使用。试试fprintf(...,ret.c_str()); -
@hanshenrik 不,这不正确。
-
不要对 C++ 对象使用旧的 C 样式格式化函数,它根本行不通。编译器应该为此大喊大叫。请改用 C++ 流。
-
抱歉,没用。 & 完全没有改变。我也试过 fprintf(f,"buffer: %s ; ret: %s\n",&buffer,&ret);
标签: c++