Почему это возвращает адрес в консоли?

0

Я пытаюсь обернуть голову вокруг ostringstream и istringstream. Поэтому, как я всегда это делаю, я сделал из него входную программу. но каждый раз, когда я пытаюсь отключить содержимое переменных имени пользователя и пароля, он возвращает адрес!

Назначение программы: создание имитируемого экрана входа в систему с использованием входных и выходных строк

код:

#include<iostream>
#include<string>
#include<conio.h>
#include<stdio.h>
#include<sstream>

using namespace std;

int main(int argv, char *argc[]){

char ch;
ostringstream username,
    password;
ostringstream *uptr, 
    *pptr;

uptr = &username;
pptr = &password;

cout << "Welcome" << endl << endl;

cout << "Enter a username: ";
do{

    ch = _getch();
    *uptr << ch;
    cout << ch;

}while(ch != '\r');


cout << endl << "Enter a Password: ";
do{
    ch = _getch();
    *pptr << ch;
    cout << "*";

}while(ch != '\r');

//if(username == "[email protected]" && password == "deadbeefcoffee10031995"){
    cout << endl << "username: " << *username << endl << "password: " << *password << endl;
//} else {
    //cout << endl << "ACCESS DENIED" << endl;
//}



return 0;
}

Я пробовал использовать * uptr и * pptr last, но до этого я пробовал просто писать и читать прямо из переменных.

  • 1
    я понятия не имею, что вы делаете, но попробуйте username.str()
  • 0
    @BryanChen ты красивый человек XD спасибо за помощь. и извините за неясный код .. я работаю над этим: P вы можете объяснить класс .str ()? или ссылку на хороший ресурс, который будет?
Теги:
ostringstream
istringstream

2 ответа

2
Лучший ответ

вы должны использовать str для получения std::string из ostringstream

так

cout << endl << "username: " << username.str() << endl << "password: " << password.str() << endl;
1

Стандартные потоки имеют операторы вывода для адресов: при попытке распечатать указатель он просто распечатает адрес указателя. Кроме того, потоки имеют преобразование в указатель, который используется для указания, находится ли поток в хорошем состоянии: когда он находится в хорошем состоянии, то есть stream.fail() == false, он преобразуется в подходящий ненулевой указатель, обычно только this. Когда он находится в состоянии сбоя, он возвращает 0 (причина, по которой он не конвертируется в bool заключается в том, чтобы избежать, например, std::cout >> i чтобы быть действительным: если он будет конвертировать в bool этот код будет действительным).

Предполагая, что вы хотите распечатать содержимое потока строк, вы просто используете stream.str() для получения потока std::string.

  • 0
    большое спасибо @DietmarKuhl! это помогло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню