我有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,而main模块中声明的变量是可访问和可读的。在此配置中,如何在main中获取用户名和密码?
发布于 2011-12-24 08:39:17
将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);发布于 2011-12-24 08:42:40
首先,我可以建议为您的用户信息创建一个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";要从main访问它,您可以执行与上面相同的命令来显示内容。
这样做的一个好处是,您的所有信息都存储在一起。例如,如果您有多个用户,密码和名称不会因为逻辑上的小错误而混淆。此外,使用链表,您可以通过简单地遍历列表来计算列表中有多少个nodes,也就是有多少个条目。
我希望这对你有用!干杯
This should show you more about linked lists if you're interested.
发布于 2011-12-24 08:44:06
为了避免变量的重复定义,您应该在源文件中定义变量,并在头文件中使用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;
}然后在从my_main调用函数时传递mysql_user_name和mysql_password的地址(&mysql_user_name和&mysql_password)。
还要注意,这些字符串是只读的,每两个传递给sql_user的指针将指向相同的"root"和"1234"字符串。
https://stackoverflow.com/questions/8621841
复制相似问题