首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言基础,传输字符串或指针

C语言基础,传输字符串或指针
EN

Stack Overflow用户
提问于 2011-12-24 08:32:56
回答 3查看 103关注 0票数 0

我有3个文件my_main.c,my_func.c带函数和my_func.h带声明。

在my_main中:

代码语言:javascript
复制
#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中

代码语言:javascript
复制
#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中

代码语言:javascript
复制
#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中获取用户名和密码?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-24 08:39:17

sql_user()更改为:

代码语言:javascript
复制
int sql_user(char** mysql_user_name, char** mysql_password)
{
    *mysql_user_name = "root";
    *mysql_password = "1234";
    return 0;
}

并调用它:

代码语言:javascript
复制
sql_user(&mysql_user_name, &mysql_password);
票数 7
EN

Stack Overflow用户

发布于 2011-12-24 08:42:40

首先,我可以建议为您的用户信息创建一个struct链表,如下所示:

代码语言:javascript
复制
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);传递给函数,并通过调用更改它

代码语言:javascript
复制
user->mysql_user_name = "root";
user->mysql_password = "1234";

要从main访问它,您可以执行与上面相同的命令来显示内容。

这样做的一个好处是,您的所有信息都存储在一起。例如,如果您有多个用户,密码和名称不会因为逻辑上的小错误而混淆。此外,使用链表,您可以通过简单地遍历列表来计算列表中有多少个nodes,也就是有多少个条目。

我希望这对你有用!干杯

This should show you more about linked lists if you're interested.

票数 1
EN

Stack Overflow用户

发布于 2011-12-24 08:44:06

为了避免变量的重复定义,您应该在源文件中定义变量,并在头文件中使用extern关键字,以便其他转换单元知道该变量。

编辑:你没有上面的问题,因为mysql_user_namemysql_password只是在头文件中声明的,我只是想指出它,因为这是通常的做法,如果你定义了变量,你会有一个链接器错误。

而且,sql_user()并没有做你想让它做的事情:

代码语言:javascript
复制
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**,即:

代码语言:javascript
复制
int sql_user(char** mysql_user_name, char** mysql_password)
{
    *mysql_user_name = "root";
    *mysql_password = "1234";
    return 0;
}

然后在从my_main调用函数时传递mysql_user_namemysql_password的地址(&mysql_user_name&mysql_password)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8621841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档