-1
我在项目中有Query.c,Query.h和main.c文件。我在Query.c中定义了一个SQLOpen()函数,并在主函数中调用它。执行函数所需的变量在本地声明。在函数中声明的局部变量不起作用
:在SQLOpen()函数定义Query.c;当我调用SQLOpen(0功能在主,因为它不检测一个局部变量的程序不执行“字符logInData [256]”。
#include <stdio.h>
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"
#include "Query.h"
#define DATABASE_PATH "/Users/Sumanth/Desktop/NewDB2.fdb"
int SQLOpen()
{
ISC_STATUS status_vector[20];
isc_db_handle database=NULL;//database = SQLGetDatabase();
char logInData [256];
short bufferLength;
sprintf(logInData, "%c%c%c%c%c%c%s%c%c%s", isc_dpb_version1,
isc_dpb_num_buffers,
1,
90,
isc_dpb_user_name,
strlen("SYSDBA"),
"SYSDBA",
isc_dpb_password,
strlen("masterkey"),
"masterkey");
bufferLength = strlen(logInData);
if (isc_attach_database(status_vector, strlen(DATABASE_PATH), DATABASE_PATH, &database,bufferLength, logInData))
{
isc_print_status(status_vector);
}
isc_print_status(status_vector);
// SQLTestForErrors(status_vector);
// throw(ConnectionError, "");
return 0;
}
} Query.h:
#ifndef SQLQueryTest_Query_h
#define SQLQueryTest_Query_h
int SQLOpen();
#endif
的main.c:
#include <stdio.h>
#include "Query.h"
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"
int main(int argc, const char * argv[])
{
SQLOpen();
}
如果我执行这一主要功能,我得到错误(函数调用是使用Firebird数据库的功能,但它没有连接) 如果我有“字符logInData [256];”在主函数那么它正在工作(连接到数据库)。代码在下面提到。 的main.c:
#include <stdio.h>
#include "Query.h"
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"
int main(int argc, const char * argv[])
{
char logInData [256];
SQLOpen();
}
为什么应该包括 '字符logInData [256];'尽管它已经在SQLOpen()函数中声明为局部变量了? 为什么它不是从SQLOpen()函数读取的?
请看这个问题,并帮助我解决。
It is not displaying any error but I am unable to connect to database.
The status of status vector is :
ISC_STATUS [20]
[0] long 0
[1] long 0
[2] long -1073741909
[3] long -1073743396
[4] long -1881089127
[5] long -1881089079
[6] long -1073741909
[7] long -1880974640
[8] long 515730401
[9] long 1
[10] long -1073743404
[11] long 4180
[12] long -1073743544
[13] long -1881140636
[14] long 4096
[15] long 0
[16] long 1
[17] long -1073743488
[18] long -1073743480
[19] long -1073743404
for a successful connection to the database, the status of status vector should look like:
status_vector ISC_STATUS [20]
[0] long 1
[1] long 0
[2] long 0
[3] long 0
[4] long 0
[5] long 0
[6] long 0
[7] long 0
[8] long 0
[9] long 0
[10] long 0
[11] long 0
[12] long 0
[13] long 0
[14] long 0
[15] long 0
[16] long 0
[17] long 0
[18] long 0
[19] long 0
我只是抛弃了这一点,但在你的'sprint'中几乎没有任何内容是*字符*,那么为什么你要使用'%c'作为格式说明符?这不是一个普遍的魔法黑匣子。阅读['sprintf()'](http://en.cppreference.com/w/c/io/fprintf)*工作原理*。 – WhozCraig
你有一个makefile吗?你在用一些IDE吗?如果问题在编译中,请显示您如何编译它。 –
你会得到什么错误? –