函数中声明的局部变量不起作用

时间:2014-06-25 21:43:15

标签: c xcode function firebird

我在项目中有Query.c,Query.h和main.c文件。我在Query.c中定义了一个SQLOpen()函数并在main中调用它。执行函数所需的变量在本地声明。当我调用SQLOpen(在main中的0函数,因为它没有检测到SQLOpen()函数中定义的一个局部变量'char logInData [256];'时,程序没有执行。

Query.c

#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();

}

如果我执行这个main函数,我会收到错误(函数调用是使用firebird的数据库函数,但它没有连接) 如果我包含'char logInData [256];'在main函数中它正在工作(连接到数据库)。代码如下所述。 的 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();

}

为什么我应该包含'char 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

1 个答案:

答案 0 :(得分:0)

当我宣布ISC_STATUS status_vector [20];&#39;作为一个全局变量,它工作正常,我能够连接到数据库。