Могу ли я получить помощь в поиске выходных данных этой функции? (C ++) - PullRequest
0 голосов
/ 23 октября 2019

Каким будет вывод этого кода со всеми соответствующими элементами?

Я понимаю, что все делает до *(x+4) = x[n];, и оттуда я немного растерялся.

int main(){
    int n;
    char y[10] = "tasked";
    char *x = y;
    n = strlen (x);
    *(x+4) = x[n];
    x++;
    printf ("%s",x);
}

Редактировать: я не понял, что *(x+4) = x[n]; сделал со строкой, спасибо всем!

Ответы [ 2 ]

3 голосов
/ 23 октября 2019

Вывод программы будет

ask

После этого объявления

char y[10] = "tasked";

массив y инициализируется следующим образом

char y[10] = { 't', 'a', 's', 'k', 'e', 'd', '\0', '\0', '\0', '\0' };

То естьвсе символы, которые не имеют соответствующего инициализирующего символа из строкового литерала, инициализируются нулями.

После этого оператора

n = strlen (x);

n равно 6.

ИтакЭто утверждение

*(x+4) = x[n];

делает следующее. Он заменяет символ 'e' (с индексом 4) на символ '\ 0' (с индексом 6);

Так что после этого массив имеет следующее содержимое

{ 't', 'a', 's', 'k', '\0', 'd', '\0', '\0', '\0', '\0' }

Тогдауказатель перемещается на одну позицию и указывает на второй символ массива (с индексом 1), то есть на символ «а».

Таким образом, начиная с этого символа «а», пока не встретится завершающий ноль символов'a', 's' и 'k' выводятся.

0 голосов
/ 23 октября 2019

enter image description here

Откройте этот сайт : и вставьте свой код, затем добавьте следующее перед строкой «int main ()»:

#include <string.h> 

Это позволит вам использовать функцию "strlen". Нажмите зеленую кнопку «Выполнить», чтобы получить результат. Затем следуйте @Vlad от московского ответа, и вам сообщат.

...