Форум программистов, компьютерный форум CyberForum.ru

своя strlen - C++

Восстановить пароль Регистрация
 
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
31.03.2013, 19:49     своя strlen #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream.h>
int strlen(char *string)
{
    int lengh=0;
    while(*string++)
    lengh++;
    return ++lengh;
}
int main(void)
{
    cout<<strlen("lili");
    char s[]="lili";
    cout<<strlen(s);
    system("pause");
    return 1;
}
почему то в 1м случае выводит мне 4 (должно быть 5 т.к 4+ нуль символ)
во втором случае все как надо выводит 5
в чем ошибка????
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 19:49     своя strlen
Посмотрите здесь:

Проблема с strlen C++
strlen C++
C++ strlen
C++ strlen()+1
функция strlen C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,341
31.03.2013, 19:58     своя strlen #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Точно сказать не могу. Но в первом случае аргумент имеет тип const char *, он автоматически не приводится к типу char *. Поэтому для него вызывается более подходящая функция strlen - т.е. стандартная.
Короче, впредь не называй свои фукнции также как и стандартные из C/C++.
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
31.03.2013, 20:02  [ТС]     своя strlen #3
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Точно сказать не могу. Но в первом случае аргумент имеет тип const char *, он автоматически не приводится к типу char *. Поэтому для него вызывается более подходящая функция strlen - т.е. стандартная.
Короче, впредь не называй свои фукнции также как и стандартные из C/C++.
но я же не подключила string.h а значит у него нет сейчас такой функции
но интереса ради переименовала и таки все заработало как надо, тогда не можете ли вы обьяснить почему оно вызвало стандарную strlen из string.h который я даже не подключила????
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,341
31.03.2013, 20:12     своя strlen #4
Цитата Сообщение от лилиэн Посмотреть сообщение
но я же не подключила string.h
Я практически уверен, что он берет функцию из iostream.h.

Добавлено через 4 минуты
iostream.h - это кажись какая-то древность... Если пишешь на C++, то используй <iostream>
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
31.03.2013, 20:13     своя strlen #5
C++
1
2
3
4
5
6
size_t mystrlen(const char * str){
    const char * p(str);
    while(*p)
        ++p;
    return p-str;
}
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
31.03.2013, 20:13     своя strlen #6
int strlen(char *string) - это перегрузка другой глобальной функции, у которой сигнатура
int strlen(const char *string);

в одном случае вызывается одна, в другом - другая. чтобы не было конфликтов, поменяйте имя у своей функции.
хотя бы с большой буквы сделайте:
int StrLen(const char* string)
IrineK
Заблокирован
31.03.2013, 20:38     своя strlen #7
во втором случае все как надо выводит 5
Кому это все - надо, чтобы слово из 4 букв давало длину 5? Посмотрите как работает стандартная функция.
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
31.03.2013, 21:37  [ТС]     своя strlen #8
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
size_t mystrlen(const char * str){
    const char * p(str);
    while(*p)
        ++p;
    return p-str;
}
а объяснить можно????

Добавлено через 1 минуту
Цитата Сообщение от IrineK Посмотреть сообщение
Кому это все - надо, чтобы слово из 4 букв давало длину 5?
мне не длину слова надо а длину строки , а она увы все же длиннее на 1 символ
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
31.03.2013, 21:44     своя strlen #9
Цитата Сообщение от лилиэн Посмотреть сообщение
а она увы все же длиннее на 1 символ
то есть строка без букв будет длиной в 1 символ? )))
А пустой строки вообще не бывает?

Добавлено через 1 минуту
Цитата Сообщение от лилиэн Посмотреть сообщение
а объяснить можно????
а че тут объяснять?
Увеличиваем указатель, пока не уткнемся в 0. Потом отнимаем от конечного адреса адрес начальный.
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
31.03.2013, 21:48  [ТС]     своя strlen #10
Цитата Сообщение от Croessmah Посмотреть сообщение
то есть строка без букв будет длиной в 1 символ? )))
то есть если я напишу
C++
1
char a[]="";
а потом проверю длину а то ее длина будет =1, а не 0, и да, пустой строки нету, есть строка которая содержит только NULL .Вот в этом то я уверенна на все 101%
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,341
31.03.2013, 21:58     своя strlen #11
Цитата Сообщение от лилиэн Посмотреть сообщение
пустой строки нету
Тебе нужно нучиться различать понятие длины строки и размер массива, в которой она хранится.
Строка "абв" имеет длину 3, что логично и понятно. Но если посмотреть на память, то эта строка будет занимать 3+1 байта(т.е. понадобится 4 элемента типа char), что тоже понятно. Четвертый байт - это символ конца строки, который не является символом самой строки, он просто обозначает место, где строка кончается.

Добавлено через 1 минуту
Т.е. строка у нас из трех символов, но для ее хранения понадобится массив из 4х элементов, чтобы вместить символ конца строки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 15:10     своя strlen
Еще ссылки по теме:

strlen C++
C++ <cstring> strlen() C++
C++ Не работает функция strlen

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
01.04.2013, 15:10  [ТС]     своя strlen #12
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Тебе нужно нучиться различать понятие длины строки и размер массива, в которой она хранится.
Строка "абв" имеет длину 3, что логично и понятно. Но если посмотреть на память, то эта строка будет занимать 3+1 байта(т.е. понадобится 4 элемента типа char), что тоже понятно. Четвертый байт - это символ конца строки, который не является символом самой строки, он просто обозначает место, где строка кончается.

Добавлено через 1 минуту
Т.е. строка у нас из трех символов, но для ее хранения понадобится массив из 4х элементов, чтобы вместить символ конца строки.
ну это я и имела в виду))))
Yandex
Объявления
01.04.2013, 15:10     своя strlen
Ответ Создать тему
Опции темы

Текущее время: 17:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru