Строка в c "Привет, мир"? - PullRequest
       3

Строка в c "Привет, мир"?

0 голосов
/ 15 января 2020

Я не понимаю, как слово "слово" напечатано в строке 5. Может кто-нибудь объяснить мне?

    #include <stdio.h>
    int main(void) {
        char str[50] = "hello\0 worl\bd";
        printf("\n %s ",str);
        printf("%s \n",str+str[4]-*str);
        return 0;
    }

Ответы [ 2 ]

3 голосов
/ 15 января 2020

Итак, пошагово:

  • "str" ​​ указывает на вашу строку "hello\0 worl\bd", что на самом деле "hello\0 word" (так как \ b удаляет предыдущий символ)

  • * str = - это «содержимое» вашего указателя символа, которое означает первый символ вашей строки, то есть «h» «

  • str [4] = - это (4 + 1) -й символ str, то есть 'o'

  • str [4] - * str = 'o'-'h' = 7 (но почему это 7? 'H' имеет значение символа ASCII 104 и 'o' значение 111 )

  • str + 7 = str [7]


Итак, вы в основном печать строки, начинающейся с индекса: 7 вашей исходной строки.

Отсюда: 'word';)

1 голос
/ 15 января 2020

Прежде всего, строка как:

 0 => h
 1 => e
 2 => l
 3 => l
 4 => o
 5 => \0
 6 => (space bar)
 7 => w
 8 => o
 9 => r
10 => l
11 => \b
12 => d

теперь ваша команда:

printf("%s \n",str+str[4]-*str);

C выполнила следующую вещь

 str => point of starting printing

 str[4] as above is o

 *str as above is h

 Thus o - h = 7 [i.e. ascii value 111 - 104]

 printing would starting from character 7 i.e. [str+7]
...