C基础知识,传输字符串或指针

时间:2011-12-24 00:32:56

标签: c

我有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,而在主模块中声明的变量是可达和可读的。 如何在此配置中获取主要用户名和密码?

3 个答案:

答案 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_namemysql_password只是在头文件中声明,我只想简单地指出它这是通常的做法,如果你确定了变量,你就会遇到链接器错误。

此外,sql_user()没有做你想做的事情:

int sql_user(char* mysql_user_name, char* mysql_password)
{
    mysql_user_name = "root";
    mysql_password = "1234";
    return 0;
}

这导致局部变量mysql_user_namemysql_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_namemysql_passwordmy_main)调用该函数时,传递&mysql_user_name&mysql_password的地址。

另请注意,这些字符串文字是只读的,传递给sql_user的每两个指针都指向相同的"root""1234"字符串。