我来分析一下,
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的直接给数组附值,是不合法的.
我理解的你的意思应该是,有十个用户,每个用户都有不同的登录账号和密码,然后再把a数组和pwd数组里面的十个账号密码分别赋值给十个用户。
这里为了简便,我只写了三个用户。
不过不确定我理解的是不是对的,如果不是,就见笑了。
#include "stdafx.h"
#include
#include
#include
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");
}
应该可以这样:
for(int i=0;i<10;i++)
{
strcpy( users[i].account,a);
strcpy( users[i].password,pwd);
}
strcpy(char *dest,char *src )第一个参数是目标地址,第二个是要复制的源地址(注意只要提供首地址即可)
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当做字符串使用时,没有结束标志,会出错误。
你没有试试么?试试运行下,看看结果,第二种没问题应该。