Я печатал символ из строки и пытался, если смогу напечатать нулевой символ strlen(str)
. Но символ до того, как ноль был напечатан.
Затем я попытался напечатать strlen(str)+1
, он все еще печатает символ до нуля.
Тогда
Индекс в значительной степени превышает предел, 1010101 -> Ошибка сегментации, как и ожидалось.
MAX -> 100 -> char перед '\ 0'
MAX + 1 -> 101 -> символ перед '\ 0'
МАКС + 5 -> 105 -> мусор
МАКС + 2, МАКС + 3, МАКС + 4 -> символ до '\ 0'
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
char str[101];
scanf("%[^\n]",str);
str[strlen(str)]='\0';
printf("%c",str[105]);
}
Ввод condn,
1 =
Ввод:
How are you?
Символьная переменная -> Печатный символ
str [strlen (str) -1] ->?
str [strlen (str)] ->?
str [strlen (str) +1] ->?
стр [100] ->?
стр [101] ... стр [104] ->?
str [105] -> значение мусора, которое меняется каждый раз
Теперь мой вопрос изменился с того, почему нулевой символ не печатается, на почему почему печатается символ перед нулем? Даже за пределы ценностей ??????
Edit:
printf ("% s", str [strlen (str)]) возвращает -> (ноль)
Меньше, чем дает segmentation fault
и больше, чем дает (null)