Доступ к символу с нулевым символом в конце - PullRequest
0 голосов
/ 27 июня 2018

Вдохновленный этим вопросом .

Код:

#include <stdio.h>

int main()
{
   char arr[] = "Hello";
   char *ptr = arr + 5;
   printf("%s\n",ptr);
}

В приведенном выше коде я получил доступ к символу с нулевым символом в конце.

Итак, что же на самом деле происходит при доступе к символу с нулевым символом в строке? Это неопределенное поведение?

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Ничего особенного. Указатель на нулевой символ интерпретируется как строка нулевой длины функциями, ожидающими строку.

0 голосов
/ 27 июня 2018

Вы по-прежнему получаете доступ к строке с нулевым символом в конце.
Его длина равна нулю, т. Е. Он не содержит ничего для печати. ​​

Ваш код в основном совпадает с

 printf("");

Сравните, не повторяющийся, но похожий вопрос:

Эффект «+1» после параметра строки формата для printf ()

0 голосов
/ 27 июня 2018

По сути, вы передаете пустую строку в качестве аргумента, поэтому он должен рассматриваться как таковой.

Для %s спецификатора преобразования, с printf() семейством

[...] Символы из массива записывается до (но не включая) завершающего нулевого символа. [...]

В вашем случае нулевой терминатор появляется в первом элементе массива 1014 *, вот и все.

Просто для пояснения, доступ к нулевому терминатору - это нормально, доступ к указателю NULL - это не нормально, и они оба разные вещи !!

...