Возвращаемое значение функции strlen ()?

Это определение strlen, которое я вытащил.

Функция strlen () считает количество символов в данной строке и возвращает целочисленное значение. Останавливает счет персонажа, когда найден нулевой символ.

Теперь, по моему мнению, strlen для «kshitij» должен быть = 7, т.е. не включая нулевой символ, потому что функция перестает считать, как и когда она встречает нулевой символ.
Поэтому, если я хочу напечатать слово «kshitij» и его обратное столько раз, сколько букв в слове, то правильный код должен быть.

#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char a[1000];
gets(a);
int len=strlen(a);
for(int i=0; i<= len ; i++)
{
for(int j=len ; j>=0; j--)
{
cout<<a[j];
}
cout<<" ";
}
getch();
return 0;
}

соответственно это обеспечивает достаточно правильный вывод (кроме пробелов я не понимаю)

введите описание изображения здесь

теперь мне было интересно узнать, что он напечатает, если я это сделаю:

 #include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char a[1000];
gets(a);
int len=strlen(a);
for(int i=0; i<= len ; i++)
{
for(int j=len -1 ; j>=0; j--)
{
cout<<a[j];
}
cout<<" ";
}
getch();
return 0;
}

который, по моему мнению, не должен выдавать последнюю букву «j», но я вижу, что она выдает тот же результат, но на 1 интервал меньше, чем раньше.

введите описание изображения здесь

Точно так же я пытался:

#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char a[1000];
gets(a);
int len=strlen(a);
for(int i=0; i<= len - 1  ; i++)
{
for(int j=len ; j>=0; j--)
{
cout<<a[j];
}
cout<<" ";
}
getch();
return 0;
}

введите описание изображения здесь

здесь, по моему мнению, выходной результат должен содержать только «7 — 1 = 6» раз обратной строки, но выходной результат почти тот же. -1 не влияет на значение «len».

Со всем этим на моей тарелке, я чувствую, что strlen функция также должна считать нулевой символ strlen (a)= 8 (в том числе ‘\0’), но тогда я вижу только 7 выходов в окне вывода.
Это заставляет меня задуматься о том, считает ли функция strlen нулевой символ или нет, и если да, то она должна показывать его как пробел в окне вывода. Я не могу понять полную концепцию, любая помощь приветствуется?
Я новичок в программировании, пожалуйста, успокойся на мне. Спасибо :).

-3

Решение

Если у вас есть строка из 7 символов, индексы массива печатаемых символов изменяются от 0 до 6, и strlen() вернусь 7, a[7] содержит нулевой символ-терминатор

Так что если вы начнете свой цикл с j = len, первый символ, который он печатает, является нулевым символом, затем он напечатает печатные символы в оставшихся итерациях. Если вы начнете свой цикл с len-1, он будет печатать только печатные символы.

Дополнительный интервал, который вы видите, это тот нулевой символ. В некоторых операционных системах печать нулевого символа не имеет видимого эффекта, но в вашей системе это, очевидно, печатает пробел.

3

Другие решения

это

for(int i=0; i<= len ; i++)

с len == 7 будет зацикливаться на 0, 1, 2, 3, 4, 5, 6, 7;
потому что исполнение будет происходить до тех пор, пока условие i<= len правда.
Он прекратит выполнение, когда это условие больше не будет истинным, что ранее не применялось i==8,
За i==8 не будет выполнено, но для 1-7 и для 0, то есть 8 раз.

Идея сделать цикл с казнями в исполнении Len

for(int i=0; i< len ; i++)
1

По вопросам рекламы [email protected]