gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:46:09 24 4
gpt4 key购买 nike

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

查询.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;

}

}查询.h:

#ifndef SQLQueryTest_Query_h
#define SQLQueryTest_Query_h

int SQLOpen();

#endif

ma​​in.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 的数据库函数,但它没有连接)如果我包括“char logInData [256];”在主函数中,它正在工作(连接到数据库)。下面提到了代码。ma​​in.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() 函数中声明为局部变量,但在 main 中? 为什么它不从 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

最佳答案

当我声明“ISC_STATUS status_vector[20];”时作为一个全局变量,它工作正常,我能够连接到数据库。

关于c - 函数中声明的局部变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24419106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com