C проблемы с пользовательскими функциями - PullRequest
0 голосов
/ 09 января 2020

Я тестирую sqlite3 с C, и я решил создать простую программу, которая берет имя пользователя и пароль из ввода в функцию и передает их для вставки в таблицу базы данных sqlite3. У меня проблема в том, что всякий раз, когда я упоминаю функцию, которую я написал где-либо в моем коде, я получаю такую ​​ошибку для каждого упоминания:

error: expected identifier or ‘(’ before ‘register’
 void *register(const char *u,const char *p)

Вот мой код:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sqlite3.h>

void register(const char *u,const char *p)
{
 printf("Enter your desired username: \n");
 scanf("%s", u);
 printf("Enter your desired password: \n");
 scanf("%s", p);    
}


int main()
{
const char new_user[50];
const char new_pass[50];
sqlite3 *db;
sqlite3_stmt *stmt;
int rc = sqlite3_open("test.db", &db);
if(rc != SQLITE_OK)
{
    fprintf(stderr, "Problem opening Database: %s\n", sqlite3_errmsg(db));
    return 0;
}


char *sql = "INSERT INTO Users VALUES(?, ?, '0335804828', 'Strada userului nr 9', NULL, 0);";
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);

 if (rc == SQLITE_OK) 
{        
    sqlite3_bind_text(stmt, 1, "blala", -1, SQLITE_STATIC);
    sqlite3_bind_text(stmt, 2, "blabla", -1, SQLITE_STATIC);
} 
else 
{        
        fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
    }

return 0;
}

Как Вы можете видеть, что код еще не закончен, но он не компилируется из-за указанной ошибки. Я искал похожие ответы, но в моем случае ничего не помогало. Я пытался изменить функцию и ее типы, но ничего не работает.

Ответы [ 2 ]

1 голос
/ 09 января 2020
void register(const char *u,const char *p)
{
 printf("Enter your desired username: \n");
 scanf("%s", u);
 printf("Enter your desired password: \n");
 scanf("%s", p);    
}

Два вопроса. Вы используете register в качестве имени функции, но это ключевое слово C, которое нельзя использовать.

Когда вы меняете имя, параметры вашей функции неверны. const char *u означает, что байты, на которые ссылается 'u', равны const и не могут быть изменены.

void foo(char *u,char *p);

или если указатели не меняются

void foo(char * const u,char * const p);
0 голосов
/ 09 января 2020

register является ключевым словом в C. Вы не можете использовать ключевые слова для имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...