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

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

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

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

27.02.2011, 03:49. Просмотров 386. Ответов 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.
Заранее огромное спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2011, 03:49     Почему функция передает не то значение
Посмотрите здесь:

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

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

Почему не работает функция? - C++
Вот понадобилась функция для взятия остатка от деления нецелых чисел написал такую: long double OperationDouble( long double a , long...

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

почему не работает функция? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; void function (int k)// { for(int i=0;i&lt;k;i++) std::cout&lt;&lt;&quot;*&quot;; } int...

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

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

Почему функция всегда возвращает 0? - C++
bool trie_tree::consonants_check(char letter) { return tolower(letter) == ('w' || 'r' || 't' || 'p' || 's' || 'd' || 'f' || 'g' || 'h'...

Почему не работает выведенная функция - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int otd(int prin); //Прототип функции int main() { int...

Почему не работает функция Matricav? - C++
#include &lt;vcl.h&gt; #pragma hdrstop #pragma argsused #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;windows.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
27.02.2011, 03:59     Почему функция передает не то значение #2
Ксюха21, Потому что у вас видимо sizeof(char*) == 4.
C
1
  int count = strlen(str);
Вот правильное сравнение.
Для использования подключить string.h
Ксюха21
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 8
27.02.2011, 04:17  [ТС]     Почему функция передает не то значение #3
дело в том, что я с помощью sizeof пыталась написать аналог функции strlen и поэтому им не возпользовалась. Хоть я уже и написала функцию, правда другим способом, а вот с sizeof'ом не разобралась. Все таки char занимает 1 байт и насколько я пониимаю, то в этом случае sizeof обязан вернуть 13, а возвращает 4.
Не могу никак понять...
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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;
}
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
27.02.2011, 16:45     Почему функция передает не то значение #5
Ксюха21, оператор sizeof возвращает размер объекта. В данном случае ты считаешь размер указателя на char (т.е. переменной, которая хранит адрес в памяти), который у тебя равен (и всегда будет равен) 4 байтам. А нужно посчитать число элементов, которые располагаются в памяти, начиная с этого адреса и заканчивая символом '\0' (который является признаком конца C-строки). Как это сделать - написано выше.
Ксюха21
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 8
27.02.2011, 22:21  [ТС]     Почему функция передает не то значение #6
Огромное всем Вам спасибо, до меня наконец-то дошло!! Я всё поняла. А есть где-то кнопочка, чтобы поблагодарить каждого отдельно, я вроде где-то видела, а найти не могу) О нашла!
Yandex
Объявления
27.02.2011, 22:21     Почему функция передает не то значение
Ответ Создать тему
Опции темы

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