Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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+中的Python风格字符串替换+;_Python_C++_String - Fatal编程技术网

C+中的Python风格字符串替换+;

C+中的Python风格字符串替换+;,python,c++,string,Python,C++,String,在回答Python中字符串替换是如何工作的问题时显示了它 我相信它是这样工作的 string toSql(string table, string field, string value) { string out; return out = "INSERT INTO %s (%s) VALUES (%s)" % (table,field,value); } 在没有文件I/O?< /P>的情况下,C++中有类似的方法吗? 我试图使用它来形成一个SQLite数据库的查询 编辑 我

在回答Python中字符串替换是如何工作的问题时显示了它

我相信它是这样工作的

string toSql(string table, string field, string value)
{
    string out;
    return out = "INSERT INTO %s (%s) VALUES (%s)" % (table,field,value);
}
在没有文件I/O?< /P>的情况下,C++中有类似的方法吗? 我试图使用它来形成一个SQLite数据库的查询

编辑 我避免使用外部库。前助推


此外,输入由程序提供,而不是由用户提供。因此,我不相信我会遇到注射漏洞

,为了回答被问及的问题,习惯性的C++方式是用<代码> STD::OSTRIGSTROUND。请注意,此流类由内存支持,而不是磁盘上的文件

(还有代码> SNPROTFF)/代码>选项,它看起来更接近Python字符串格式,但有C风格的接口,不应该从现代C++中使用,没有充分的理由。如果你正在编写C++,那么写C++,而不是C)/P>


使用此代码,可以在某处存储<代码> SqLe3E3PraveRdStMt/<代码>并重用它。

< P>为了回答被问及的问题,习惯性的C++方式是用<代码> STD::OSTRIGSTROUND。请注意,此流类由内存支持,而不是磁盘上的文件

(还有代码> SNPROTFF)/代码>选项,它看起来更接近Python字符串格式,但有C风格的接口,不应该从现代C++中使用,没有充分的理由。如果你正在编写C++,那么写C++,而不是C)/P>


使用此代码,可以在某处存储<代码> SqLe3E3PraveRdStMt/<代码>并重用它。

< P>为了回答被问及的问题,习惯性的C++方式是用<代码> STD::OSTRIGSTROUND。请注意,此流类由内存支持,而不是磁盘上的文件

(还有代码> SNPROTFF)/代码>选项,它看起来更接近Python字符串格式,但有C风格的接口,不应该从现代C++中使用,没有充分的理由。如果你正在编写C++,那么写C++,而不是C)/P>


使用此代码,可以在某处存储<代码> SqLe3E3PraveRdStMt/<代码>并重用它。

< P>为了回答被问及的问题,习惯性的C++方式是用<代码> STD::OSTRIGSTROUND。请注意,此流类由内存支持,而不是磁盘上的文件

(还有代码> SNPROTFF)/代码>选项,它看起来更接近Python字符串格式,但有C风格的接口,不应该从现代C++中使用,没有充分的理由。如果你正在编写C++,那么写C++,而不是C)/P> 使用此代码,您可以将sqlite3_prepared_stmt存储在某个地方并重用它。

看看函数的用法

string toSql( string table, string field, string value )
{
  char buffer[ 100 ];
  size_t length = sprintf( buffer, "INSERT INTO %s (%s) VALUES (%s)", table.data( ), field.data( ), value.data( ) );

  if ( lenght < 0 )
  {
      //increase buffer size and try again.
  }

  printf("SQL Query = '%s'\n", buffer );

  return buffer
}
string-toSql(字符串表、字符串字段、字符串值)
{
字符缓冲区[100];
size\u t length=sprintf(缓冲区,“插入%s(%s)值(%s)”,table.data(),field.data(),value.data());
如果(长度<0)
{
//请增加缓冲区大小,然后重试。
}
printf(“SQL查询=“%s”\n”,缓冲区);
返回缓冲区
}
看看函数的定义

string toSql( string table, string field, string value )
{
  char buffer[ 100 ];
  size_t length = sprintf( buffer, "INSERT INTO %s (%s) VALUES (%s)", table.data( ), field.data( ), value.data( ) );

  if ( lenght < 0 )
  {
      //increase buffer size and try again.
  }

  printf("SQL Query = '%s'\n", buffer );

  return buffer
}
string-toSql(字符串表、字符串字段、字符串值)
{
字符缓冲区[100];
size\u t length=sprintf(缓冲区,“插入%s(%s)值(%s)”,table.data(),field.data(),value.data());
如果(长度<0)
{
//请增加缓冲区大小,然后重试。
}
printf(“SQL查询=“%s”\n”,缓冲区);
返回缓冲区
}
看看函数的定义

string toSql( string table, string field, string value )
{
  char buffer[ 100 ];
  size_t length = sprintf( buffer, "INSERT INTO %s (%s) VALUES (%s)", table.data( ), field.data( ), value.data( ) );

  if ( lenght < 0 )
  {
      //increase buffer size and try again.
  }

  printf("SQL Query = '%s'\n", buffer );

  return buffer
}
string-toSql(字符串表、字符串字段、字符串值)
{
字符缓冲区[100];
size\u t length=sprintf(缓冲区,“插入%s(%s)值(%s)”,table.data(),field.data(),value.data());
如果(长度<0)
{
//请增加缓冲区大小,然后重试。
}
printf(“SQL查询=“%s”\n”,缓冲区);
返回缓冲区
}
看看函数的定义

string toSql( string table, string field, string value )
{
  char buffer[ 100 ];
  size_t length = sprintf( buffer, "INSERT INTO %s (%s) VALUES (%s)", table.data( ), field.data( ), value.data( ) );

  if ( lenght < 0 )
  {
      //increase buffer size and try again.
  }

  printf("SQL Query = '%s'\n", buffer );

  return buffer
}
string-toSql(字符串表、字符串字段、字符串值)
{
字符缓冲区[100];
size\u t length=sprintf(缓冲区,“插入%s(%s)值(%s)”,table.data(),field.data(),value.data());
如果(长度<0)
{
//请增加缓冲区大小,然后重试。
}
printf(“SQL查询=“%s”\n”,缓冲区);
返回缓冲区
}

您可以查看1。C发明字符串格式;2.不要使用字符串操作来创建数据库查询。这样很难调试bug和sql注入漏洞。使用预处理语句和管理查询创建的库。或者,您应该查看SQL库中的预处理语句。准备/执行周期将允许您安全地绑定参数。C发明字符串格式;2.不要使用字符串操作来创建数据库查询。这样很难调试bug和sql注入漏洞。使用预处理语句和管理查询创建的库。或者,您应该查看SQL库中的预处理语句。准备/执行周期将允许您安全地绑定参数。C发明字符串格式;2.不要使用字符串操作来创建数据库查询。这样很难调试bug和sql注入漏洞。使用预处理语句和管理查询创建的库。或者,您应该查看SQL库中的预处理语句。准备/执行周期将允许您安全地绑定参数。C发明字符串格式;2.不要使用字符串操作来创建数据库查询。这样很难调试bug和sql注入漏洞。使用预处理语句和管理查询创建的库。或者,您应该查看SQL库中的预处理语句。准备/执行周期将允许您安全地绑定参数。太棒了!这似乎正是我想要的。使用像
sqlite3\u prepare()
这样的东西有什么好处吗<代码>sqlite3_bind()等?我这样问是因为我不是最熟悉这些,我只是在使用
sqlite3\u exec()
@Slvrfn User I