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

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

Войти
Регистрация
Восстановить пароль
 
intern
15 / 15 / 6
Регистрация: 30.03.2014
Сообщений: 74
Завершенные тесты: 2
#1

Почему sizeof массива char равно 4? - C++

23.06.2014, 05:42. Просмотров 1083. Ответов 3
Метки нет (Все метки)

Почему sizeof ch3 равно 4?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
 
int main()
{
    char ch1[] = "Cpp";
    char ch2[] = {'C', '+', '+', '\0'};
 
    std::cout << "ch1\t" << sizeof ch1 << "\t" << ch1 << std::endl;
    std::cout << "ch2\t" << sizeof ch2 << "\t" << ch2 << std::endl << std::endl;
 
    int len = strlen(ch1)+strlen(ch2)+1;
    char *ch3 = new char(len);
    for (int i=0; i!=len; ++i) ch3[i]='\0';
 
    strcat (ch3, ch1);
    strcat (ch3, ch2);
    std::cout << "ch3\t" << sizeof ch3 << "\t" << ch3 << std::endl;
 
    delete ch3;
 
    return 0;
}
Результат выполнения:
Код
ch1     4       Cpp
ch2     4       C++

ch3     4       CppC++
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2014, 05:42     Почему sizeof массива char равно 4?
Посмотрите здесь:
sizeof( char * ) & sizeof(char) C++
C++ Fwrite (buffer , sizeof(char), sizeof(buffer), pFile)
C++ Почему sizeof выдает разные результаты?
C++ Объяснить почему sizeof(arr) всегда возвращает одно и то же значение
C++ Sizeof(.) или constexpr size_t tmp = sizeof(.)
C++ Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ?
C++ Определить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем указанный символ
C++ В чем отличие двумерного массива типа char от массива указателей на char?
sizeof массива C++
C++ Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
Определение размера массива + sizeof C++
C++ Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 06:25     Почему sizeof массива char равно 4? #2
Цитата Сообщение от intern Посмотреть сообщение
Почему sizeof ch3 равно 4?
Размер указателя.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
23.06.2014, 10:54     Почему sizeof массива char равно 4? #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
    char *ch3 = new char(len);//<--Это вообще выделение одного элемента. Чтобы выделить массив элементов используйте вырежение new[len]
    for (int i=0; i!=len; ++i) ch3[i]='\0';//Соответственно здесь выход за пределы выделенной памяти.
//...
//Ну а если выделите массив, то и delete нужен соответствующий:
delete [] ch3;
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
23.06.2014, 10:59     Почему sizeof массива char равно 4? #4
Цитата Сообщение от intern Посмотреть сообщение
Почему sizeof ch3 равно 4?
Цитата Сообщение от alsav22 Посмотреть сообщение
Размер указателя.
и это зависит от среды обитания(просто чтобы не было убеждения, что размер указателя всегда равен 4)
Почему sizeof массива char равно 4?
Yandex
Объявления
23.06.2014, 10:59     Почему sizeof массива char равно 4?
Ответ Создать тему
Опции темы

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