如何将char []转换为std :: string

时间:2015-11-30 11:29:26

标签: c++

我试图将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是检查我的字符串是否正确,情况并非如此。 缓冲区被正确打印,但ret给了我一些奇怪的迹象,我既不能阅读也不能在这里重现。

有没有人发现我的代码有问题?

由于

2 个答案:

答案 0 :(得分:2)

ret不是char*。但是,printf的{​​{1}}说明符需要%s(即C样式字符串)。

您可以将char*printf一起使用(这会使您的字符串不必要,因为您将其转换回char数组)或C ++输出工具:

ret.c_str()

答案 1 :(得分:1)

您无法使用%s将字符串对象传递给printf。

您需要将ret.c_str()作为参数传递,或者更好的是,使用cout

在此处阅读更多内容:C++ printf with std::string?