Question...

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Trajor
Сообщения: 2
Зарегистрирован: 04 июл 2005, 18:15

Скажите пожалуйста, почему так:

main.cpp
#include "str.h"
using namespace nstr;

void main()
{
char s[5] = {'+', '-', '*', '/', '^'};

is_in_set('+', s);

cout << sizeof(s)/sizeof(char); //выводит 5
}
---------------
str.h
#include <iostream>
using namespace std;

namespace nstr
{
void is_in_set(char c, char* s)
{
cout << sizeof(s)/sizeof(char) << "\n"; //выводит 4
};
};

Я так понял, что в main.cpp выводится количество элементов в массиве, как хотелось бы,а в str.h все время 4. С чем это связано?
Спасибо.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Всё правильно, в первом случае ты проверяешь размер массива из 5 символов типа char[5], во втором случае ты проверяешь размер указателя на массив типа char*.
Размер любого указателя в 32-разрадной системе равен 4 байтам.
Если тебе нужно узнать длину строки типа char *s, воспользуйся функцией strlen(s)
Trajor
Сообщения: 2
Зарегистрирован: 04 июл 2005, 18:15

Спасибо
Ответить