2015-01-19 4 views
-3

У меня проблема с функцией strcmp в C++, компилятор говорит «ошибка чтения символов строки», и я вообще использовал строку. Если бы вы могли посмотреть, я бы был более чем полезенstrncmp function on C++

/// это где используется функция, данные класса MailAcount //

cout << "please enter user name: " << endl; 
    char input_user[20]; 
    cin >> input_user; 
    cout << "please enter password: " << endl; 
    char input_password[20]; 
    cin >> input_password; 

    if (!strncmp(input_user, data.GetUser(), 20) || 
     !strncmp(input_password, data.GetPassword(), 20)) 
     cout << "ERROR" << endl; 
    else 
    { 
     cout << "Access confirm" << endl; 
    } 

// это заголовок MailAcount //

class MailAcount 
    { 
     private: 
     char* _email; 
     char* _password; 

     public: 
     MailAcount(char* email,char* password); 
     MailAcount(); 
     char* GetUser(); 
     char* GetPassword(); 
     ~MailAcount(); 
}; 

// это каст из MailAcount //

#include "MailAcount.h" 
#include <iostream> 

using namespace std; 

MailAcount::MailAcount(char *email,char *password) 
{ 
    _email = email; 
    _password = password; 

} 

    MailAcount::MailAcount() 
{ 

} 

char* MailAcount::GetUser() 
{ 
    return _email; 
} 

char* MailAcount::GetPassword() 
{ 
    return _password; 
} 


MailAcount::~MailAcount() 
{ 

} 
+3

'input_password' длиной 10 символов, включая нулевой терминатор, но вы сравниваете 20 символов ...? –

+0

opss я играл с кодом, чтобы попробовать и посмотреть, как его решить .. я изменил его .. спасибо :) – user3488862

+3

Вы могли бы избежать любых странных проблем, используя 'std :: string' вместо того, чтобы возиться с указателями. –

ответ

-1

Сбой программы в отладчике, скорее всего, из-за ситуации, когда вы не предоставили память символу, на который указывают указатели в почтовой учетной записи.

Это один работает

char myName[20]; // 20 characters on the stack 
char myPwd[20]; // 20 characters on the stack 
MailAccount(myName, myPwd); // ok, points to allocated memory (on the stack) 

Это один разобьет

char* myName; // only a pointer pointing somewhere 
char* myPwd; // only a pointer pointing somewhere 
MailAccount(myName, myPwd); // not ok, as the pointers will point (most likely) to non accessible memory 

EDIT: Как вы помечены это как C++, вы должны рассмотреть возможность использования StD строк библиотеки как комментаторы уже предложили. EDIT2: Исправлено, комментарии к комментарию

+0

'& variable' всегда действительный указатель, хотя, возможно, и тот, который вы намеревались. – molbdnilo