Как исправить «ошибку: недопустимое преобразование из« int »в« const char * ’[-fpermissive]» в C ++? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь соединить mysql и c ++.Это процесс попытки ввода введенного значения в БД.При компиляции g ++ возникает ошибка.

Я пишу с использованием c ++ 98 в Visual Studio 2017 и CentOS7.Mysql Connector используется Mysql ++ ver.8.0.

#include "[~ PATH]/mysql++/include/mysql++/cmdline.h"
#include "[~ PATH]/mysql++/include/mysql++/mysql++.h"
#include "[~ PATH]/mysql++/examples/printdata.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
        char buffer[256];
        string name;
        string id;
        string password;
        string department;

        cout << ">> Sign Up <<\n" << endl;
        cout << "1.Name: "; cin >> name;
        cout << "2.ID: "; cin >> id;
        cout << "3.PASSWORD: "; cin >> pw;
        cout << "4.Department: "; cin >> dpt;

        mysqlpp::Connection conn(false);
        if (conn.connect("member_list", "localhost", "user", "password1234"))
        {
                **mysqlpp::Query query 
                 = conn.query(sprintf(buffer,"INSERT INTO signup_member (name,id,password,department) 
                   VALUES ('%s','%s','%s','%s')",name.c_str(),id.c_str(),password.c_str(),department.c_str()));**
                if (mysqlpp::StoreQueryResult res = query.store()) {
                        cout << "Sign up SUCCESS!" << endl;
                }
                else {
                        cerr << "Sign up FAIL. Try again." << '\n' << query.error() << endl;
                        return 1;
                }
                return 0;
        }
        else {
                cerr << "DB connection failed: " << conn.error() << endl;
        }
}

Когда я искал, он сказал, чтобы сохранить значение в буфере, используя 'sprintf', а затем сохранить его в БД.Я ожидаю, что это работает хорошо, но это не так.sign_up.cpp:30:175: error: invalid conversion from ‘int’ to ‘const char*’ [-fpermissive]

1 Ответ

1 голос
/ 25 июня 2019

sprintf возвращает int, представляющее

В случае успеха возвращается общее количество записанных символов.В это число не входит дополнительный нулевой символ, автоматически добавляемый в конце строки.В случае неудачи возвращается отрицательное число.

, а не массив символов, в который вы записали свои данные, как вы ожидаете, поэтому в основном вы должны сделать:

sprintf(buffer,"INSERT INTO signup_member (name,id,password,department) 
                   VALUES ('%s','%s','%s','%s')",name.c_str(),id.c_str(),password.c_str(),department.c_str());
mysqlpp::Query query 
                 = conn.query(buffer);
...