Работа функции SizeOf для char Array - PullRequest
4 голосов
/ 23 ноября 2011
void main()
{
   char s[]="\12345s\n";
   printf("%d",sizeof(s));
}

Когда я компилирую, это дает 6. Я не понимаю, почему это дает 6 инст из 8. Нравится {'\1','2','3','4','5','s','\n'}

Пожалуйста, кто-нибудь может объяснить причину этого, я хочу глубокого и ясного объяснения. Я буду им благодарен.

Ответы [ 3 ]

12 голосов
/ 23 ноября 2011

Поскольку \123 считается одним символом, это escape-последовательность (восьмеричная). Так sizeof вычисляет 5 символов '\123', '4', '5', 's', '\n' и окончание '\0'.

2 голосов
/ 23 сентября 2012
char s[]="\12345s\n";

\ указывает escape-последовательность. По умолчанию восьмерично, если числа используются до 3 разрядов.Таким образом, \ 123 будет оцениваться в восьмеричном виде как -> 8 * 8 * 1 + 8 * 2 + 3 = 83 Так что, если вы напечатаете это, вы найдете его S45s Как S -> Ascii эквивалентный 83 Следовательно, размер также равен 4.

1 голос
/ 23 ноября 2011
char s[]="\12345s\n"

невероятно равно:

char s[] = { '\123', '4', '5', 's', '\n', 0 }

итого шесть элементов.

...