sizeof символьный массив для динамически создаваемого массива

0

Мне нужно создать массив символов динамически, основанный на длине шаблона, т.е. plen. Когда я делаю sizeof (table), я получаю 8. Почему я получаю 8 вместо 3.

int main()
{
char *pattern="aaa";

   int plen=strlen(pattern);

   char *table=new char[plen+1];
  for(int i=0;i<plen;i++)
  {
   table[i]=pattern[i];
  }
  cout<<sizeof(table)<<plen<<table;

return 0;}

Выход, который я получаю, равен 83aaa..8 для sizeof (table) 3 для plen и aaa для таблицы, которая имеет сохраненное значение шаблона

  • 1
    sizeof происходит во время компиляции, в зависимости от типа.
  • 0
    хорошо, когда я делаю strlen, я получаю 3. С тех пор как это массив символов. Но я не знаю, как он получает 8, когда я делаю sizeof.
Показать ещё 8 комментариев
Теги:

2 ответа

2

Это потому, что table является указателем, а не массивом. Размер указателя в вашей архитектуре составляет 8 байтов.

  • 0
    так что если я использую char * table = new char [plen + 1]; или int * t = new int [4]; и сделайте sizeof (t) или sizeof (table), я получу 8, так как это указатель. Хорошо для char * .. Я буду делать strlen. Я просто жонглировал, чтобы увидеть разницу
0

sizeof(expression) является просто синтаксической альтернативой sizeof(type of that expression).

В вашем примере sizeof(table) является просто синтаксической альтернативой sizeof(char*). Значение указателя или символа, на которое он указывает, или массив, на который он указывает, никогда не рассматриваются для результата, а только тип.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню