出力がUTFと関係しているとは思いますが、どうすればよいか分かりません。 誰か説明してください。std :: string :: size()strange behavior
#include <iostream>
#include <cstdint>
#include <iomanip>
#include <string>
int main()
{
std::cout << "sizeof(char) = " << sizeof(char) << std::endl;
std::cout << "sizeof(std::string::value_type) = " << sizeof(std::string::value_type) << std::endl;
std::string _s1 ("abcde");
std::cout << "s1 = " << _s1 << ", _s1.size() = " << _s1.size() << std::endl;
std::string _s2 ("abcdé");
std::cout << "s2 = " << _s2 << ", _s2.size() = " << _s2.size() << std::endl;
return 0;
}
出力は次のようになります。
QTCreator
は次のようにコンパイル
sizeof(char) = 1
sizeof(std::string::value_type) = 1
s1 = abcde, _s1.size() = 5
s2 = abcdé, _s2.size() = 6
g++ --version
プリントg++ (Ubuntu 5.4.0-6ubuntu1~16.04.1) 5.4.0 20160609
:
g++ -c -m32 -pipe -g -std=c++0x -Wall -W -fPIC -I../strsize -I. -I../../Qt/5.5/gcc/mkspecs/linux-g++-32 -o main.o ../strsize/main.cpp
g++ -m32 -Wl,-rpath,/home/rodrigo/Qt/5.5/gcc -o strsize main.o
どうもありがとう!
'sizeof( 'é')'を印刷して、あなたが得るものを見てください。 – Peter
お時間をいただきありがとうございます。 ; ' 'のstd :: COUT < 'のstd :: COUT << "はsizeof(E '')=" <<はsizeof( 'E')<<はstd :: ENDL: 私は、これらの2行を追加しました< "はsizeof(\" é\ ")=" <<はsizeof( "E")<<はstd ::てendl; ' そして、出力された:' 'のはsizeof( 'E')= 4' sizeof(「E」)= 3'は、はsizeof(「E」) 'おそらくそのサイズは、文字列リテラル'「E」4である理由を説明するだろうint' 'へ' char'を推進して 'は' @canellasです – canellas
'ue'はUTF-8(0xC3 0xA9)で2つの' char'sでエンコードされ、その後にヌルターミネータが続くため、 'sizeof("é ")'は 'const char []'と同じです。 –