2013-10-11 1 views

ответ

1

*(a+1) такая же, как a[1] который является char, не char * что printf ожидает за %s.

РЕДАКТИРОВАТЬ: уточнение: printf необходим адрес для %s спецификатора, a+1 является таким адресом (а именно адрес второго символа в строке), но *(a+1) затем дает значениепо этому адресу. Это всего лишь символ и, скорее всего, не действительное место памяти для printf для чтения.

+0

Может быть, я совсем не прав, но насколько я знаю, в этом случае символ + 1 указывает адрес строки, но не значение, хранящееся в строке. Поэтому я использовал * (a + 1) для достижения символов, начиная с w i.e. wake (хотя и не работал). я не понимал, как это было напечатано, хотя мы дали только один адрес. –

+0

'a + 1' * является * адресом второго символа в строке, но' * (a + 1) 'дает значение по этому адресу. 'printf' нужен адрес, а не значение. – Kninnug

+0

спасибо за помощь –

5

Вы разыменования указателя, что делает его char но пытается вывести строку. Изменение оператора печати на printf("%s\n", a+1);

+0

Возможно, я ошибаюсь, но насколько я знаю, в этом случае символ + 1 указывает адрес строки, но не значение, хранящееся в строке. Поэтому я использовал * (a + 1) для достижения символов, начиная с w i.e. wake (хотя и не работал). я не понимал, как это было напечатано, хотя мы дали только один адрес. –

0

Вы не хотите defrefeence char *:

printf("%s\n", (a+1)); 

делает то, что вы хотите.

+0

Может быть, я совсем не прав, но насколько я знаю, в этом случае + 1 дает адрес строки, но не значение, хранящееся в строке. Поэтому я использовал * (a + 1) для достижения символов, начиная с w i.e. wake (хотя и не работал). я не понимал, как это было напечатано, хотя мы дали только один адрес. –

Смежные вопросы