Именно так язык определяет восьмеричные управляющие последовательности.
Восьмеричная escape-последовательность, которая может быть частью символьной константы или строкового литерала, состоит из \
, за которым следуют ровно 1, 2 или 3 восьмеричных цифры ('0'
.. '7'
).
В "\07777"
за обратной косой чертой следуют 3 восьмеричных цифры (0, 7, 7), которые представляют символ со значением 077
в восьмеричном или 63
в десятичном. В ASCII или производной от ASCII кодировке это знак вопроса '?'
.
Таким образом, литерал представляет собой строку длиной 3, состоящую из '?'
, '7', '7'.
Но в вашем вопросе должна быть опечатка. Когда я запускаю вашу программу, я получаю вывод:
63 55 55
--?-- --7-- --7--
Если я изменю объявление p
на
char *p = "\0777";
Я получаю результат, который вы описываете. Обратите внимание, что последний ----
на самом деле состоит из двух дефисов, за которыми следует нулевой символ, за которым следуют два дефиса. Если вы работаете в Unix-подобной системе, попробуйте направить вывод программы через cat -v
или cat -A
.
Когда вы публикуете код, очень важно копировать и вставлять его, а не перепечатывать.
(И вам не хватает #include <stdio.h>
вверху.)
person
Keith Thompson
schedule
05.08.2012
char *p = "\7777";
без 0 впереди. - person pmg   schedule 05.08.2012