LPSTR, dziwny output

0
  #include <iostream>
 #include <windows.h>

 using namespace std;

int main()
{
    char s='l';
    LPSTR strpoint=&s;

    cout << strpoint << endl;
    return 0;
}

Dlaczego jest taki dziwny output zamiast normalnego adresu w pamięci zmiennej s?

5

Rzutowanie zrób: cout << (void*)strpoint << endl;, czy tam cout << static_cast<void*>(strpoint) << endl; bardziej w stylu C++.

3

Tak się dzieje ponieważ to na co wskazuje strpoint to jeden znak, a nie ciąg zakończony NULL jak by oczekiwał ostream, operator<< z ostream traktuje LPSTR jako wskaźnik na ciąg, a nie wskaźnik.

5

std::cout jest typu std::ostream, a typ ten ma przeładowany operator <<:
wewnętrznie: http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/
zewnętrznie: http://www.cplusplus.com/reference/ostream/ostream/operator-free/

strpoint to u ciebie LPSTR czyli de facto const char *, czyli zostanie wykonany poniższy operator:

ostream& operator<< (ostream& os, const char* s);

I ten operator na wyjściu poda kolejne znaki, które leżą pod wskaźnikiem, aż będzie '\0'.
Jeśli chcesz aby był użyty inny operator, np. chcesz wyświetlić adres, no to musisz castować:

cout << (void *)strpoint;
cout << static_cast<void *>(strpoint);

Poza tym, sama idea:

char s='l';
LPSTR strpoint=&s;

jest średnia, ponieważ brakuje '\0' na końcu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1