Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: cpp wchar  (Přečteno 1321 krát)

Kedrigern

cpp wchar
« kdy: 17 Dubna 2011, 14:56:59 »
Ahoj,

poprvé jsem potřeboval použít široké znaky v c++. Inu udělal jsem pokus:
Kód: [Vybrat]
#include <iostream>
#include <string>

using namespace std;

int main () {
         char   c = 'í';                 //
        wchar_t w = L'í';
         string  s( "příliš žluťoučký kůň úpěl ďábelské ódy");
        wstring ws(L"příliš žluťoučký kůň úpěl ďábelské ódy");

         cout << c << endl;       //
         cout.flush();                 //
        wcout << w << endl;
        wcout.flush();
         cout << s << endl;
         cout.flush();
        wcout << ws << endl;

        return 0;
}
Zkompiluji:
Kód: [Vybrat]
keddie@note:~/src/cpp/hash$ g++ -Wall znaky.cpp
znaky.cpp:7:13: warning: multi-character character constant
znaky.cpp: In function ‘int main()’:
znaky.cpp:7:13: warning: overflow in implicit constant conversion
keddie@note:~/src/cpp/hash$ ./a.out


příliš žluťoučký kůň úpěl ďábelské ódy
k� koH �p �belsk� �dy
Warnnigy jsou jasné, trochu mě zaráží, že ale fungují jen ty nekorektní verze.

Ještě větší chaos do toho vnese, pokud vybrané (komentáře vzadu) řádky zakomentuji, dostanu tento výstup:
Kód: [Vybrat]
keddie@note:~/src/cpp/hash$ ./a.out
?
p??li? ?lu?ou?k? k?? ?p?l ??belsk? ?dy

Inu, otázka je asi jasná, co s tím? Uvítám i pokud to jen vyzkoušíte a sdělíte, co to dělá.

Ubuntu 11.04, verze g++:
Kód: [Vybrat]
keddie@note:~/src/cpp/hash$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.5.2-8ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.5 --enable-shared --enable-multiarch --with-multiarch-defaults=i386-linux-gnu --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib/i386-linux-gnu --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib/i386-linux-gnu --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-gold --enable-ld=default --with-plugin-ld=ld.gold --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu3)

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: cpp wchar
« Odpověď #1 kdy: 18 Dubna 2011, 19:20:47 »
Kód: [Vybrat]
mkiklhorn@admin3:~/Dokumenty/test$ g++ -Wall znaky.cpp
znaky.cpp:7:21: warning: multi-character character constant
znaky.cpp: In function ‘int main()’:
znaky.cpp:7:21: warning: overflow in implicit constant conversion
mkiklhorn@admin3:~/Dokumenty/test$ ./a.out


příliš žluťoučký kůň úpěl ďábelské ódy
k� koH �p �belsk� �dy
mkiklhorn@admin3:~/Dokumenty/test$ nano znaky.cpp

Chyba při čtení: /home/mkiklhorn/.nano_history: Operace zamítnuta

Stiskněte klávesu Enter pro pokračování ve spouštění programu nano.

mkiklhorn@admin3:~/Dokumenty/test$ g++ -Wall znaky.cpp
mkiklhorn@admin3:~/Dokumenty/test$ ./a.out
?
p??li? ?lu?ou?k? k?? ?p?l ??belsk? ?dy
mkiklhorn@admin3:~/Dokumenty/test$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.5.2-8ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.5 --enable-shared --enable-multiarch --with-multiarch-defaults=x86_64-linux-gnu --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib/x86_64-linux-gnu --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib/x86_64-linux-gnu --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-gold --enable-ld=default --with-plugin-ld=ld.gold --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu3)

//edit: ať je něco vidět:
prvni verze:
Kód: [Vybrat]
mkiklhorn@admin3:~/Dokumenty/test$ ./a.out | hex
0x00000000: ad 0a ed 0a 70 c5 99 c3 - ad 6c 69 c5 a1 20 c5 be .J.Jp..íliš ž
0x00000010: 6c 75 c5 a5 6f 75 c4 8d - 6b c3 bd 20 6b c5 af c5 luťou..ký ků.
0x00000020: 88 20 c3 ba 70 c4 9b 6c - 20 c4 8f c3 a1 62 65 6c . úp..l ..ábel
0x00000030: 73 6b c3 a9 20 c3 b3 64 - 79 0a 70 59 ed 6c 69 61 ské ódyJpY.lia
0x00000040: 20 7e 6c 75 65 6f 75 0d - 6b fd 20 6b 6f 48 20 fa  ~lueouMk. koH .
0x00000050: 70 1b 6c 20 0f e1 62 65 - 6c 73 6b e9 20 f3 64 79 p[l O.belsk. .dy
0x00000060: 0a  

druha verze:
Kód: [Vybrat]
mkiklhorn@admin3:~/Dokumenty/test$ ./a.out | hex
0x00000000: 3f 0a 70 3f 3f 6c 69 3f - 20 3f 6c 75 3f 6f 75 3f ?Jp??li? ?lu?ou?
0x00000010: 6b 3f 20 6b 3f 3f 20 3f - 70 3f 6c 20 3f 3f 62 65 k? k?? ?p?l ??be
0x00000020: 6c 73 6b 3f 20 3f 64 79 - 0a                      lsk? ?dyJ

« Poslední změna: 18 Dubna 2011, 19:28:01 od Martin Kiklhorn »
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

MacHala

  • Stálý člen
  • **
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • ZlejT
Re: cpp wchar
« Odpověď #2 kdy: 18 Dubna 2011, 21:09:49 »
ty vypisy u me dopadly presne stejne, ale jelikoz C++ neni zrovna muj salek caje, tak s tim neporadim...
pro zajimavost posilam verzi gcc:
Kód: [Vybrat]
$ g++ -v
Using built-in specs.
COLLECT_GCC=/usr/bin/g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.5.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,lto --enable-plugin --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)


jinak k michani cout a wcout: http://gcc.gnu.org/ml/gcc-bugs/2006-05/msg01196.html
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

 

Provoz zaštiťuje spolek OpenAlt.