次のコードはコンパイルされますが、実行時にアクセス違反が発生します。構造体のcharポインタに直接データを入力するためのscanf()の使用方法
typedef struct login
{
char *name;
char *pw;
}login;
int _tmain(int argc, _TCHAR* argv[])
{
login user1, user2;
GetUser(user1);
printf("\nUN is %s, PW is %s", user1.name, user1.pw);
GetUser(user2);
printf("\nUN is %s, PW is %s", user2.name, user2.pw);
getch();
return 0;
}
void GetUser(login &user)
{
char *name;
name = (char*)malloc(20);
printf("Enter User Name: ");
fflush(stdin);
scanf("%s", name);
user.name = name;
printf("Enter password: ");
user.pw = GetPassword();
free(name);
}
私は構造体にchar[20];
にchar *name;
を変更すると、コードが正常に動作します。
malloc
を使用して、ただしGetUser(user2);
user1.name == user2.name
の2番目の呼び出しの後に上記のコードを変更しました。 user1.pw
およびuser2.pw
は、期待通りです。
コードで '参照型 'を使用しています。しかし、質問に 'c'タグがあります –
' void GetUser(login&user) 'は有効ではありませんC. – chux