我有3个文件my_main.c,my_func.c包含函数,my_func.h包含声明。
在my_main中:
#include "my_func.h"
char* database = "mydatabase";
char* dtable = "mytable";
sql_user(mysql_user_name, mysql_password);
sql_table_length(database, dtable, mysql_user_name, mysql_password);
在my_func.c
中#include "my_func.h"
int sql_user(char* mysql_user_name, char* mysql_password)
{
mysql_user_name = "root";
mysql_password = "1234";
return 0;
}
在my_func.h中
#include <my_global.h>
#include <mysql.h>
#include <string.h>
char* mysql_user_name;
char* mysql_password;
int sql_user(char* mysql_user_name, char* mysql_password);
int sql_table_length(char* database, char* dtable, char* mysql_user_name, char* mysql_password);
使用此代码progem编译时没有错误,我想从my_func.c文件中的函数获取用户名和密码。 但是我得到值0x0,而在主模块中声明的变量是可达和可读的。 如何在此配置中获取主要用户名和密码?
答案 0 :(得分:7)
将sql_user()
更改为:
int sql_user(char** mysql_user_name, char** mysql_password)
{
*mysql_user_name = "root";
*mysql_password = "1234";
return 0;
}
并调用它:
sql_user(&mysql_user_name, &mysql_password);
答案 1 :(得分:1)
首先,我是否可以建议为您的用户信息创建struct
链接列表,如下所示:
typedef struct my_users{
char *mysql_user_name;
char *mysql_password;
USER *next; // points to the next user in your list if you have more than one, otherwise point to NULL
} USER;
然后在调用它(更改信息)时,您将其作为int sql_user(USER *user);
传递给函数并通过调用更改
user->mysql_user_name = "root";
user->mysql_password = "1234";
要从您的主要访问它,您可以执行与上面相同的命令来显示内容。
这样做的一个好处是,所有信息都存储在一起。例如,如果您有多个用户,则密码和名称不会因逻辑中的小错误而混淆。此外,使用链接列表,您只需遍历列表即可计算列表中有多少nodes
个,即多少个条目。
我希望你觉得这很有用!干杯
This should show you more about linked lists if you're interested.
答案 2 :(得分:0)
为避免重复定义变量,您应该在源文件中定义变量,并在标题中使用extern
关键字,以便其他翻译单位了解变量。
编辑:您没有上述问题,因为mysql_user_name
和mysql_password
只是在头文件中声明,我只想简单地指出它这是通常的做法,如果你确定了变量,你就会遇到链接器错误。
此外,sql_user()
没有做你想做的事情:
int sql_user(char* mysql_user_name, char* mysql_password)
{
mysql_user_name = "root";
mysql_password = "1234";
return 0;
}
这导致局部变量mysql_user_name
和mysql_password
指向"root"
和"1234"
。如果要修改传递给sql_user
的指针,请使用char**
,即:
int sql_user(char** mysql_user_name, char** mysql_password)
{
*mysql_user_name = "root";
*mysql_password = "1234";
return 0;
}
然后在mysql_user_name
(mysql_password
和my_main
)调用该函数时,传递&mysql_user_name
和&mysql_password
的地址。
另请注意,这些字符串文字是只读的,传递给sql_user
的每两个指针都指向相同的"root"
和"1234"
字符串。