C++ wchar_t και ελληνικοί χαρακτήρες

tom1972 | Δευ, 07/23/2012 - 13:31 | 3' | 5

Για σε όλους.... και πάλι εδώ....

Σε πρόγραμμα ΚΟΝΣΟΛΑΣ C++ (πάντα στο linux), θέλω να εμφανίζω μηνήματα με cout αλλά στα ΕΛΛΗΝΙΚΑ.
δηλ.
cout << "Καλημέρα σε όλους" << endl;

Έψαξα στο internet, και βρήκα στο site:
http://www.adslgr.com ..... /forum/

και ανέφερε τον τύπο wchar_t για ελληνικά ...
Δεν τον έχω ξαναχρησιμοποιήσει διότι ήξερα ότι είναι μόνο για κινέζικους χαρακτήρες.
Η ελληνική γλώσσα καλύπτεται από το ASCII με μόνο 8bit-1Byte, οπότε ο char μας κάνει (νομίζω...)

Τέλος πάντων, πέραν του τι νομίζω εγώ, ακούω πάντα τους γνώστες και προσπάθησα να εφαρμόσω το κόλπο ...
Έγραψα αυτό:

wchar_t *ss = L"Καλημέρα σε όλους";
cout << ss << endl;
// Προσοχή με ss δεν εννοώ χίτλερ και τέτοια ...

Δεν μου έβγαλε το μήνυμα αλλά έναν 16-αδικό αριθμό - προφανώς έβγαλε τη διεύθυνση στη μνήμη που είναι αποθηκευμένη στο δείκτη ss.

Παρ'όλα αυτά το παρακάτω βγάζει μήνυμα

char *ss = "Linux to everyone";
cout << ss << endl;

ΕΡΩΤΗΣΕΙΣ

1. Γιατί τo cout δεν βγάζει strings σε wchar_t, και βγάζει μόνο διεύθυνση που είναι αποθηκευμένη στο δείκτη ??

2. Αφού οι ελληνικοί χαρακτήρες - ο κωδικός σε ASCII δηλ, είναι μέσα στους 256, άρα απαιτούνται 8 bit - 1 Byte, γιατί δεν μας κάνει ο τύπος char, και χρειάζεται ο wchar_t, που στο σύστημά μου είναι

cout << "sizeof(wchar_t) = " << sizeof(wchar_t) << endl;
[Απάντηση] sizeof(wchar_t) = 2

και δεδομένου ότι από τα γνωστά βιβλία που έχω διαβάσει ο wchar_t είναι μόνο για κινέζικα ...

Κάντε λίγο υπομονή αλλά πιάνω κάτι ακραίες περιπτώσεις στη C++ που δεν έχω ξαναδουλέψει ....

Ευχαριστώ εκ των προτέρων !!! Ο φίλος σας ο C++ψαχουλιάρης tom1972

Δώσε αστέρια!

MO: 1 (ψήφοι: 1)

Σχόλια

1. Για τη χρήση με wchar_t υπάρχει το wcout αντί για το cout
2. Στο δικό μου μηχάνημα (debian stable 64bit) το wchar τυπώνει ερωτηματικά (με το wcout αντί για το cout) αλλά το παρακάτω δουλεύει μια χαρά...
char ss[] = "καλημέρα";
cout << ss << endl;

Το wcout λειτουργεί μια χαρά, αλλά με τον τύπο wchar_t τα ελληνικά εμφανίζονται σαν κενά (spaces).
Τελικά αυτά που λένε για τον τύπο wchar_t τα "C++θηρία" στο site που ανέφερα ... ισχύουν ή όχι ??

Φίλε το wcout λειτουργεί μόνο στον compiler του qtcreator ....
Στο devcpp δεν το αναγνωρίζει ...
Πότε ισχύει το wcout και σε ποια βιβλιοθήκη βρίσκεται ...???

Ευχαριστώ πάντως για την απόκριση ....

Γεια και χαρά και από εμένα.

Θα προσπαθήσω να απαντήσω θέτοντας και ένα νέο ερώτημα.
Δείτε το ακόλουθο απόσπασμα από το τερματικό μου:

[chiossif@home-6400 ~]$ cat hello.cpp  && g++ hello.cpp && ./a.out
#include <iostream>

using namespace std;

int main(){
    cout << "Γειά σου κόσμε!" << endl;
    cout << "Welcome to C++ Programming" << endl;
    return 0;
}

Γειά σου κόσμε!
Welcome to C++ Programming

[chiossif@home-6400 ~]$ cat hello2.cpp  && g++ hello2.cpp && ./a.out
#include <iostream>

using namespace std;

int main(){
    const char *s1 = "Καλημέρα σε όλες και όλους :-)";
    const char *s2 = "Welcome to C++ Programming";
    cout << s1 << sizeof(s1) <<endl;
    cout << s2 << sizeof(*s2) <<endl;
    return 0;
}
Καλημέρα σε όλες και όλους :-)8
Welcome to C++ Programming1

[chiossif@home-6400 ~]$ g++ --version
g++ (GCC) 4.7.1 20120721 (prerelease)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ερώτηση:
Τι είναι αυτό το 1 στην "Welcome to C++ Programming1";

Καλό και λέφτερο καλοκαίρι ;-)