2017-04-30 1 views
0

次のコードはコンパイルされますが、実行時にアクセス違反が発生します。構造体の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は、期待通りです。

+2

コードで '参照型 'を使用しています。しかし、質問に 'c'タグがあります –

+0

' void GetUser(login&user) 'は有効ではありませんC. – chux

答えて

2

char *は何も指していません。あなたは読んでいる入力を保持するのに十分なバイト数mallocが必要です。

+0

' struct 'を' char name [20];に変更するか、 'GetUser( ...) '関数? – dmaelect

関連する問題