为什么这会在控制台中返回一个地址?

时间:2013-11-28 22:50:22

标签: c++ ostringstream istringstream sstream

我正试图围绕ostringstreams和istringstreams。所以,就像我一直这样,我用它制作了一个登录程序。但每次我尝试cout用户名和密码变量的内容时,它都会返回地址!

程序的目的:使用输入和输出字符串流创建模拟登录屏幕

代码:

#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 == "graywolfmedia25@gmail.com" && password == "deadbeefcoffee10031995"){
    cout << endl << "username: " << *username << endl << "password: " << *password << endl;
//} else {
    //cout << endl << "ACCESS DENIED" << endl;
//}



return 0;
}

我尝试使用* uptr和* pptr last,但在此之前我尝试直接从变量中编写和阅读。

2 个答案:

答案 0 :(得分:2)

您应该使用strostringstream

获取std::string

所以

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

答案 1 :(得分:1)

标准流具有地址的输出运算符:当您尝试打印指针时,它只会打印指针的地址。此外,流有一个转换为指针,用于指示流是否处于良好状态:当它处于良好状态,即stream.fail() == false时,它转换为合适的非空指针,通常只是this。当它处于失败状态时,它返回0(它未转换为bool的原因是避免例如std::cout >> i有效:如果它将转换为{{1}这个代码有效)。

假设您要打印字符串流的内容,您只需使用bool来获取流stream.str()