Char имеет другой размер, чем строка

Я работал с программой, которая использует функцию для установки нового значения в реестре, я использовал const char * , чтобы получить значение . Однако размер значения составляет всего четыре байта. Я пробовал использовать std :: string в качестве параметра вместо этого, это не сработало.
У меня есть небольшой пример, чтобы показать вам, о чем я говорю, и вместо того, чтобы решать мою проблему с помощью функции, я хотел бы знать причину, по которой она это делает.

#include <iostream>


void test(const char * input)
{
    std::cout << input;
    std::cout << "\n" << sizeof("THIS IS A TEST") << "\n" << sizeof(input) << "\n";
    /* The code above prints out the  size of an explicit string (THIS IS A TEST), which is 15. */
    /* It then prints out the size of input, which is 4.*/

    int sum = 0;
    for(int i = 0; i < 15; i++) //Printed out each character, added the size of each to sum and printed it out.
    //The result was 15.
    {
        sum += sizeof(input[i]);
        std::cout << input[i];
    }
    std::cout << "\n" << sum;
}
int main(int argc, char * argv[])
{
    test("THIS IS A TEST");
    std::cin.get();
    return 0;
}

Output:
THIS IS A TEST
15
4
THIS IS A TEST
15

Как правильно получить строковые параметры? Должен ли я перебирать весь массив символов и выводить каждый из них в строку (значение в реестре было только первыми четырьмя байтами символа)? Или я могу использовать вместо этого std :: string в качестве параметра?
Я не был уверен, что это ТАКОЙ материал, но я решил опубликовать здесь, так как считаю это один из моих лучших источников информации, связанной с программированием.

0
задан Griffin 3 November 2011 в 20:03
поделиться