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

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

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

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

23.06.2014, 05:42. Просмотров 1114. Ответов 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++
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2014, 05:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему sizeof массива char равно 4? (C++):

sizeof( char * ) & sizeof(char) - C++
Здравствуйте, не могу понять почему sizeof(char *) = 4 а sizeof(char) = 1. Ну с последним ясно , а вот с первым непойму... Может кто-то...

Fwrite (buffer , sizeof(char), sizeof(buffer), pFile) - C++
как записать часть массива чаров? допустим у нас arr; мне надо записать с позиции массива 500 до 600, 100 байтов как записать эту...

Почему sizeof выдает разные результаты? - C++
Имею код вида: #define MY_DIR L&quot;\\??\\C:\\MyCryptoDirectory&quot; VOID Func1() { GetFilesFromDirectory(MY_DIR); ...

Объяснить почему sizeof(arr) всегда возвращает одно и то же значение - C++
Начал изучать динамические массивы. Какое бы n я ни вводил, всегда создается массив из 4 элементов. Что я упустил? #include...

Sizeof(.) или constexpr size_t tmp = sizeof(.) - C++
sizeof(...) или constexpr size_t tmp = sizeof(...) Как лучше с точки зрения производительности? правильности?

Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ? - C++
Ну собственно сабж... std::fstream fs; fs.write((char*)..) В случае бинарного потока я допустим пишу байты функцией write, как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 06:25 #2
Цитата Сообщение от intern Посмотреть сообщение
Почему sizeof ch3 равно 4?
Размер указателя.
2
Croessmah
Эксперт CЭксперт С++
13203 / 7474 / 839
Регистрация: 27.09.2012
Сообщений: 18,372
Записей в блоге: 3
Завершенные тесты: 1
23.06.2014, 10:54 #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;
0
Croessmah
Эксперт CЭксперт С++
13203 / 7474 / 839
Регистрация: 27.09.2012
Сообщений: 18,372
Записей в блоге: 3
Завершенные тесты: 1
23.06.2014, 10:59 #4
Цитата Сообщение от intern Посмотреть сообщение
Почему sizeof ch3 равно 4?
Цитата Сообщение от alsav22 Посмотреть сообщение
Размер указателя.
и это зависит от среды обитания(просто чтобы не было убеждения, что размер указателя всегда равен 4)
Почему sizeof массива char равно 4?
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2014, 10:59
Привет! Вот еще темы с ответами:

Определить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем указанный символ - C++
Вот что нужно написать кодом: сравнить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем, например,...

В чем отличие двумерного массива типа char от массива указателей на char? - C++
В чем отличие двумерного массива типа char и массива указателей на char ?

sizeof массива - C++
void f(float x) { printf(&quot;%d\n&quot;,sizeof(x)); // Пишет 4 байта (размер элемента массива) } void f2(float x) {...

Определение размера массива + sizeof - C++
Массив из 6 чисел: sizeof возвращает 24 байта. Тот же массив вызван функцией возвращает только 4 байта. #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.06.2014, 10:59
Ответ Создать тему
Опции темы

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