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++ 使用特定值创建特定格式的char*_C++_Sqlite_Type Conversion - Fatal编程技术网

C++ 使用特定值创建特定格式的char*

C++ 使用特定值创建特定格式的char*,c++,sqlite,type-conversion,C++,Sqlite,Type Conversion,我试图使用程序其他区域给出的值,以特定格式创建char*类型,values()括号内的值是程序给出的值。 格式应如下所示: char* sql = "INSERT INTO RecurringEvents (title,description,duration,recurtype,startfrom,endingtype,dateend,occurences,venueid) " \ "VALUES ('title','description','duration','r

我试图使用程序其他区域给出的值,以特定格式创建char*类型,values()括号内的值是程序给出的值。 格式应如下所示:

  char* sql = "INSERT INTO RecurringEvents (title,description,duration,recurtype,startfrom,endingtype,dateend,occurences,venueid) "  \
         "VALUES ('title','description','duration','recurtype','startfrom','endingtype','dateend',occurences,venueid); "
如您所见,文本值必须在“”标点符号内,而int值是单独存在的,因此通常的命令可能如下所示:

"INSERT INTO RecurringEvents (title,description,duration,recurtype,startfrom,endingtype,dateend,occurences,venueid) "  \
     "VALUES ('thetitle','thedesc','theduration','recurtype','startfrom','enddddtype','dateend',2,4); ";
下面给出了需要执行此操作的函数,并不是说这一切都很重要,而是为了解释,它将事件(类)数据全部转换为string/int值,以便它们可以用于形成INSERT命令(这是问题所在),然后在完成此操作(并验证记录的可用性)后在数据库上执行将其添加到向量中,并关闭数据库

void addRecEvent(newRecurringEvent event, vector <newRecurringEvent> &events){
    sqlite3 *db;
    int rc;
    char *sql;
    int tableCheck;
    char *zErrMsg = 0;
    rc = sqlite3_open("data.sqlite", &db);
    string title = event.getTitle();
    string description = event.getDescription();
    string duration = to_string(event.getDuration());
    string recurType = recToString(event.getRecurType());
    string startfrom = to_string( event.getStartFrom());
    string endingtype = etypeToStr(event.getEndingType());
    string dateend = to_string(event.getDateEnd());
    int occurences = event.getOccurences();
    int venueid = event.getVenuid();
    /*CREATE INSERT COMMAND USING char*sql  IN FORMAT REQUIRED*/
    rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); //execute the command
    if (rc != SQLITE_OK){
        cout << stderr << "SQL error: %s \n", zErrMsg;

    }
    else{
        cout << stdout << "Records created succesfully";
        events.push_back(event);
    }
    sqlite3_close(db);


}
void addRecEvent(newRecurringEvent事件、向量和事件){
sqlite3*db;
int rc;
char*sql;
int表格检查;
char*zErrMsg=0;
rc=sqlite3_open(“data.sqlite”,&db);
字符串title=event.getTitle();
string description=event.getDescription();
string duration=to_string(event.getDuration());
string recurType=recostring(event.getRecurType());
string startfrom=to_string(event.getStartFrom());
字符串endingtype=etypeToStr(event.getEndingType());
字符串dateend=to_字符串(event.getDateEnd());
int occurrences=event.getoccurrences();
int venueid=event.getVenuid();
/*使用char*sql以所需格式创建INSERT命令*/
rc=sqlite3_exec(db、sql、callback、0和zErrMsg);//执行命令
如果(rc!=SQLITE_OK){

如果whozcraig留下的评论解决了我的问题,我必须使用一个准备好的语句将我的值提供给该语句

使用a并根据它们的类型绑定动态参数,然后执行该语句。绑定器会整理如何处理数据,更重要的是,安全地生成语句并避免sql注入风险is是支持它的sql后端的通用首选项(大多数都是这样,包括sqlite)。您不能以特定格式创建
char*
;由编译器决定如何表示
char*
。您的问题是关于
char
的数组,它与指向
char
的指针不同。