读书人

字符串字节有关问题

发布时间: 2013-08-09 15:16:24 作者: rapoo

字符串字节问题
\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

读书人网 >C语言

热点推荐