Visual c++ 错误C2664:&x27;sprintf';:无法将参数1从';std::string';至';字符*';

Visual c++ 错误C2664:&x27;sprintf';:无法将参数1从';std::string';至';字符*';,visual-c++,Visual C++,下面是VC++中的插入函数。 当我将char更改为string数据类型以读取下面代码中amount变量的值时,出现了这个错误 static void Insert(t_analysis* analysis) { _bstr_t strunitId; _bstr_t strGdt=time(0); _bstr_t strvalue; std::string str; std::string commandStr = "insert into tab

下面是VC++中的插入函数。 当我将char更改为string数据类型以读取下面代码中amount变量的值时,出现了这个错误

static void Insert(t_analysis* analysis)    
{    
 _bstr_t strunitId;    
 _bstr_t strGdt=time(0);    
_bstr_t strvalue;   
    std::string str;
std::string commandStr = "insert into table1(unitid,g_time_dte_1,h_1,n_1,ch_1,co_1,im_1,ve_1,er_1) Values(123,'" + strGdt +"',";
    char tempBuf[50];
for (int j = 0; j < analysis->ubPeaksIntTab;j++ )
{   
    sprintf(tempBuf, "%d", (analysis->peak + j)->amount);//here it takes the adrress of amount but not the value of amount variable.
    str += commandStr + tempBuf;
    if(j!=analysis->ubPeaksIntTab-1)
       commandStr += ",";
}

commandStr += ")";
_ConnectionPtr pConn = NULL;

try
{       
    HRESULT hr = S_OK;
    CoInitialize(NULL);
    hr = pConn.CreateInstance((__uuidof(Connection)));
    _bstr_t strCon("Provider=SQLOLEDB;Dataq Source=MYPC\\SQLEXPRESS;Initial Catalog=keerth;User ID=sa;Password=password;Connect Timeout=30;");

    if(FAILED(hr))
    {
        printf("Error instantiating Connection object\n");

    }

    hr = pConn->Open(strCon,"sa","password",0);

    if(FAILED(hr))
    {
        printf("Error Opening Database object using ADO _ConnectionPtr \n");

    }

    //Execute the insert statement
    pConn->Execute(commandStr.c_str(), NULL,adExecuteNoRecords);
    pConn->Close();
}
catch(_com_error &ce)
{
    printf("Error:%s\n",ce.ErrorMessage());
    pConn->Close();
}
}
amount变量包含浮点值。
如何将浮点值复制到String变量?< /P> < P>你将C++与C标准库函数混合。

你应该使用C++原语。看

#包括
#包括
#包括
int main(){
std::stringstream-ss;

ss使用
std::stringstream
(您需要包括
):

浮动金额=3.14159;
std::stringstream-ss;

ss对于stl字符串,不应使用sprintf,而应使用ostringstream:

#include <sstream>
#include <string>
#include <iostream>
using namespace std;

/// ...

ostringstream strstr;
strstr << (analysis->peak + j)->amount;
str += str.str()
#包括
#包括
#包括
使用名称空间std;
/// ...
ostringstream STR;
strstr峰值+j)->金额;
str+=str.str()

sprintf需要char*而不是std::string

int sprintf ( char * str, const char * format, ... );
您可以改用ostringstream

ostringstream oss1;
oss1 << (analysis->peak + j)->amount;
oss1.str();
ostringstream-oss1;
oss1峰值+j)->量;
oss1.str();

“亚历克斯”,谢谢你的回复……我希望C中的逻辑与C++不一样。我正在使用VitualStudio VC++编译器来运行应用程序。查尔是VC++唯一识别的对象。所以我试着把它声明为char * STR;但是它显示了未标识符。所以在VC++字符串中检查。这里的程序是C.CHAR*STR;const CH。ar*commandstr=“插入表1(单位ID、单位时间、单位1、单位1、单位1、单位1、单位1、单位1、单位1、单位1、单位1、单位1、单位1、单位1、单位1、单位1)中的数值(123),“+strGdt+”,“sprint(str),%d),(分析->峰值+j)->数值);//此处显示运行代码时出错错误:运行时检查失败#3-使用变量'str'时未初始化相同的初始代码。这是因为char*是指向char的指针。您需要在堆上分配内存以使其工作。或者使用堆栈分配的缓冲区,如#define BUFFER_SIZE 256 char str[缓冲区大小]谢谢你的回复。它在我运行这个程序时是很好的。但是我想在C中实现它。Actulle我的应用程序是在C中不是C++。AM使用VC++编译器运行程序。我用char * STR代替STD::String。它显示了char * STR的未声明的标识符;为什么C标签?<代码>::/Cord>是C、字符串中的语法错误。/code>和
try
是普通标识符!C标记已删除。
#include <sstream>
#include <string>
#include <iostream>
using namespace std;

/// ...

ostringstream strstr;
strstr << (analysis->peak + j)->amount;
str += str.str()
int sprintf ( char * str, const char * format, ... );
ostringstream oss1;
oss1 << (analysis->peak + j)->amount;
oss1.str();