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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ксюха21
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 8
#1

Почему функция передает не то значение - C++

27.02.2011, 03:49. Просмотров 399. Ответов 5
Метки нет (Все метки)

Помогите пожалуйста разобраться. Никак не могу понять, почему
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int s (char*);
    
int main (void) {
    char str[] = "Hello world!";
    int lenght = s(str);
    printf ("Lenght = %d.\n", lenght);
    return 0;
}
 
int s (char* str) {
     
  int count = sizeof(str);
      return count;
}
выдает вместо 13 все время 4, причем, чтобы ни было написано вместо Hello world всё равно 4.
Заранее огромное спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2011, 03:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему функция передает не то значение (C++):

Почему функция не возвращает значение? - C++
По заданию из учебника, нужно написать небольшую поисковую систему, используя все полученные знания. Вот написал такую программу, но...

Почему функция возвращает неправильное значение - C++
Пробовал дебажил функцию и каждый раз проверка проходит условие, хотя оно выполняется... в итоге возвращается false //проверка...

Что и почему дописать в int main() чтобы функция void вернула значение - C++
Что и почему дописать в int main() чтобы функция void вернула значение? #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream.h&gt;...

Главная функция (вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию) - C++
Написать главную функцию, которая вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию. Получив результаты...

Переполнение знаковых целых чисел: почему значение переменной обнуляется, а не записывается младшее значение? - C++
что то не пойму, как происходит переполнение знаковых целых чисел вот #include &lt;iostream&gt; int main(int argc, char* argv) { ...

Вывести на экран значение t при котором функция x(t) принимает максимальное значение - C++
Объясните, как решить с помощью массива. Только начал изучать C++. Знаю, как вывести максимальный из массива. Но как сделать чтобы в этот...

5
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
27.02.2011, 03:59 #2
Ксюха21, Потому что у вас видимо sizeof(char*) == 4.
C
1
  int count = strlen(str);
Вот правильное сравнение.
Для использования подключить string.h
1
Ксюха21
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 8
27.02.2011, 04:17  [ТС] #3
дело в том, что я с помощью sizeof пыталась написать аналог функции strlen и поэтому им не возпользовалась. Хоть я уже и написала функцию, правда другим способом, а вот с sizeof'ом не разобралась. Все таки char занимает 1 байт и насколько я пониимаю, то в этом случае sizeof обязан вернуть 13, а возвращает 4.
Не могу никак понять...
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
27.02.2011, 16:34 #4
Ксюха21, Не обязан он ничего. Ибо char* не эквивалентен массиву char.
Можно считать в цикле символы строки пока не встретим ноль.

Добавлено через 37 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int s (const char*);
        
int main (void) {
        char str[] = "Hello world!";
        int lenght = s(str);
        printf ("Lenght = %d.\n", lenght);
        printf("%s\n", str);
        return 0;
}
 
int s (const char* str) {
    int count=0;
    while(*str++ != '\0')
        ++count;
    return count;
}
1
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
27.02.2011, 16:45 #5
Ксюха21, оператор sizeof возвращает размер объекта. В данном случае ты считаешь размер указателя на char (т.е. переменной, которая хранит адрес в памяти), который у тебя равен (и всегда будет равен) 4 байтам. А нужно посчитать число элементов, которые располагаются в памяти, начиная с этого адреса и заканчивая символом '\0' (который является признаком конца C-строки). Как это сделать - написано выше.
1
Ксюха21
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 8
27.02.2011, 22:21  [ТС] #6
Огромное всем Вам спасибо, до меня наконец-то дошло!! Я всё поняла. А есть где-то кнопочка, чтобы поблагодарить каждого отдельно, я вроде где-то видела, а найти не могу) О нашла!
0
27.02.2011, 22:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2011, 22:21
Привет! Вот еще темы с ответами:

Почему не работает функция? - C++
Почему не работает функция? Пишет ошибку: результатом выполнения фрагмента не является 0 аргумеетов int provPas() { string...

Почему функция gets опасная? - C++
Компилирую программу с помощью G++, и компилятор пишет: warning: the `gets' function is dangerous and should not be used. Но...

Почему-то на работает функция!( - C++
Задача написать функцию, упорядочивающую массив по возрастанию. почему-то не работает((( #include &quot;stdio.h&quot; int FUNC_Vozr (int...

Почему выполняется функция? - C++
Не могу понять, почему таки выполняется функция? Значения по умолчанию нет, параметры не принимает, а ошибок не выдает Visual Studio 2015 ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru