请问结构体数组赋值的方法?具体看下面

我定义了一个结构体数组,structsave_account//保存登录帐户密码{characcount[10];charpassword[10];}users[10]=... 我定义了一个结构体数组,
struct save_account//保存登录帐户密码
{
char account[10];
char password[10];
}users[10] = {0};
和两个数组:
a[10] ;pwd[10];
现在我要把值赋给这个结构体,该怎么做?下面两种可以吗?
1、strcpy(users[].account,a[]);
2、for(i = 0; i < 8;i++)
{
users[i].account = a[i];
users[i].password = pwd[i];
或者其他方法,在线等,谢谢大家!
strcpy(users[10].account,a[10]);是不是只是把数组中第十个元素复制?要用for循环赋值吗
展开
 我来答
kingliu1234
推荐于2017-09-28 · TA获得超过578个赞
知道小有建树答主
回答量:743
采纳率:0%
帮助的人:472万
展开全部
我来分析一下,
struct save_account//保存登录帐户密码
{
char account[10];
char password[10];
}users[10] = {0};
这个我理解是定义了一个结构数组users[10], 并初始化为0.
也就是说user[]数组有10个元素,每个元素是上面的这样一个结构.

下面来看strcpy这个函数,是标准c库函数, 原型是
char * strcpy(char * strDest,const char * strSrc);

这个函数是把src所指由NUL结束的字符串复制到dest所指的数组中。
所以用这个函数,字符串必须以NULL结束,否则可能会发生访问越界. 而两个参数应该是数组首地址,所以如果要用这个函数,应该这样写strcpy(users[10].account,a);
可以构造一个循环,代码如下:
for(i = 0; i < 10;i++)
{
strcpy(users[i].account,a);
strcpy(users[i].password,pwd);
}

至于你提出的方法2的直接给数组附值,是不合法的.
追问
for(i = 0; i < 10;i++)
{
strcpy(users[i].account,a);
strcpy(users[i].password,pwd);
}
循环有什么用呢?不是一整个数组a都赋给users.account吗?如果strcpy(users[i].account,a);不是一直把a的首元素复制给users[i].account十次吗?
追答
首先你要知道, users[]本身是一个结构数组,他有10个元素,每个元素都是一个结构.而这个循环中i的值是会改变的, 所以在循环体中的users[i]会遍历整个结构数组users[].

然后,a并不是数组a[]的首元素, 这是c语言的一个语法, a表示的是数组a[]的首地址, 也可以说是数组a[]首元素的地址, 即a是指向数组a[]首元素的常指针. 注意这里, a是个常量, 是不可变的.
所以, strcpy(users[i].account,a);这句的意思是把数组a[]中的字符串复制到数组users[i].account[]中.
百度网友6b13501
2020-02-24
知道答主
回答量:3
采纳率:0%
帮助的人:1924
展开全部
我理解的你的意思应该是,有十个用户,每个用户都有不同的登录账号和密码,然后再把a数组和pwd数组里面的十个账号密码分别赋值给十个用户。

这里为了简便,我只写了三个用户。
不过不确定我理解的是不是对的,如果不是,就见笑了。
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <Windows.h>
void main()

{

char a[3][4] = {{"abc"},{"def"},{"ghi"}};//三个初始账号值

char pwd[3][4] = {{"ABC"},{"DEF"},{"GHI"}};//三个初始密码值

struct save_account//保存登录账户密码

{

char account[4];

char password[4];

}users[3] = {0};

for(int i = 0; i < 3;i++)

{

strcpy_s(users[i].account,&a[i][0]);//将a数组中保存的第i个初始账户赋值给用户i

printf("users[%d].account = %s\n",i,users[i].account);

strcpy_s(users[i].password,&pwd[i][0]);//将pwd数组中保存的第i个初始密码赋值给用户i

printf("users[%d].password = %s\n",i,users[i].password);

}

system("pause");

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐倚云3W
2011-10-02 · 超过20用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:53.6万
展开全部
应该可以这样:
for(int i=0;i<10;i++)
{
strcpy( users[i].account,a);
strcpy( users[i].password,pwd);
}
strcpy(char *dest,char *src )第一个参数是目标地址,第二个是要复制的源地址(注意只要提供首地址即可)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
efanabe
2011-10-02 · TA获得超过2008个赞
知道小有建树答主
回答量:708
采纳率:0%
帮助的人:1127万
展开全部
strcpy函数,两个参数必须是字符型指针类型,第二个参数必须是完整的字符串,也就是必须带'\0'结束标志。不能strcpy(users[10].account,a[10]);调用,如果想复制,需要strcpy(users[10].account,a);这样使用之前,必须保证a素组里含有'\0'。
第二种方法,不能保证把a数组和pwd数组表示的字符串末尾的'\0'标志复制到users[i].account和users[i].password里,也就是不能保证users[i].account和users[i].password表示的字符串的完整性。这样,以后users[i].account和users[i].password当做字符串使用时,没有结束标志,会出错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-02
展开全部
你没有试试么?试试运行下,看看结果,第二种没问题应该。
追问
第二种好像不可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式