Страница 1 из 1

Question...

Добавлено: 04 июл 2005, 18:22
Trajor
Скажите пожалуйста, почему так:

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. С чем это связано?
Спасибо.

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

Добавлено: 04 июл 2005, 19:19
Trajor
Спасибо