Возвращаемое значение функции strlen ()? - PullRequest
0 голосов
/ 24 августа 2018

Это определение 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;
 }

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

enter image description here

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

 #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 интервал меньше, чем раньше.

enter image description here

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

#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;
}

enter image description here

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

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

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

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

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

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

0 голосов
/ 24 августа 2018

Это

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++)
...