字符串字节问题
\ddd 1~3个八进制所代表字符
\xhh 1~2位十六进制所代表字符
printf("%d\n",sizeo("\12345678"));
printf("%d\n",sizeo("\xa11"));
上面\123 代表了一字符 后面的就自动当字符处理
为何\xa11这个字符串不会呢? sizeof
[解决办法]
\ddd 表示一个8进制转义字符,\xhhh..表示一个16进制转义字符
C++03中(C应该也一样),8进制转义字符可由1~3个数字组成,都是合法的;16进制转义字符的数字不限个数(>=1),并不是1~2位。
"\12345678"包含的字符是\123(十进制83), 4~8, \0, 所以size=7 没问题。
"\xa11"包含的字符是\xa11(十进制2577), \0, 但这里有个问题:你是作为普通窄字符串char*存储,2577已经超出一个char所能表示的范围(大多数sizeof(char)=8), 所以就有问题,编译器可能报错。如果换成宽字符类型就ok(sizeof(wchar_t)=16):
sizeof(L"\xa11"); //ok
[解决办法]
巴克斯范式
C Character Constants
A “character constant” is formed by enclosing a single character from the representable character set within single quotation marks (' '). Character constants are used to represent characters in the execution character set.
Syntax
character-constant :
'c-char-sequence'
L'c-char-sequence'
c-char-sequence :
c-char
c-char-sequence c-char
c-char :
Any member of the source character set except the single quotation mark ('), backslash (\), or newline character
escape-sequence
escape-sequence :
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
simple-escape-sequence : one of
\a \b \f \n \r \t \v
\' " \\ \?
octal-escape-sequence :
\ octal-digit
\ octal-digit octal-digit
\ octal-digit octal-digit octal-digit
hexadecimal-escape-sequence :
\x hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit