関数を使用してレジストリに新しい値を設定するプログラムを使用していましたconst char *
が、値を取得するために a を使用しました。ただし、値のサイズは 4 バイトのみです。代わりにパラメーターとして使用しようとしましたが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
文字列パラメータを取得する正しい方法は何ですか? 文字の配列全体をループして、それぞれを文字列に出力する必要がありますか (レジストリの値は文字の最初の 4 バイトのみでした)? またはstd::string
、代わりにパラメーターとして使用できますか?
これが SO の資料であるかどうかはわかりませんでしたが、プログラミング関連情報の最良の情報源の 1 つと考えているため、ここに投稿することにしました。