首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串字节有关问题

2013-08-09 
字符串字节问题\ddd 1~3个八进制所代表字符\xhh 1~2位十六进制所代表字符printf(%d\n,sizeo(\12345678

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

热点排行