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

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

Восстановить пароль Регистрация
 
Ксюха21
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 8
27.02.2011, 03:49     Почему функция передает не то значение #1
Помогите пожалуйста разобраться. Никак не могу понять, почему
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.
Заранее огромное спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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     Почему функция передает не то значение
Ответ Создать тему
Опции темы

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