私は非常に単純なプログラムのように見えるものを構築しようとしている C/C++ の初心者です。ファイルを c-string (const char*) にロードします。しかし、プログラムは信じられないほど単純ですが、私が理解しているようには機能していません。見てみましょう:
#include <iostream>
#include <fstream>
std::string loadStringFromFile(const char* file)
{
std::ifstream shader_file(file, std::ifstream::in);
std::string str((std::istreambuf_iterator<char>(shader_file)), std::istreambuf_iterator<char>());
return str;
}
const char* loadCStringFromFile(const char* file)
{
std::ifstream shader_file(file, std::ifstream::in);
std::string str((std::istreambuf_iterator<char>(shader_file)), std::istreambuf_iterator<char>());
return str.c_str();
}
int main()
{
std::string hello = loadStringFromFile("hello.txt");
std::cout << "hello: " << hello.c_str() << std::endl;
const char* hello2 = loadCStringFromFile("hello.txt");
std::cout << "hello2: " << hello2 << std::endl;
hello2 = hello.c_str();
std::cout << "hello2 = hello.c_str(), hello2: " << hello2 << std::endl;
return 0;
}
出力は次のようになります。
hello: Heeeeyyyyyy
hello2: 青!
hello2 = hello, hello2: Heeeeyyyyyy
hello2 の初期値は毎回変化し、常にランダムな漢字です (私は日本語のコンピューターを使用しているので、それが漢字であると推測しています)。
私の素朴な見解では、2 つの値が同じように出力されるはずです。1 つの関数は c++ 文字列を返し、それを c-string に変換し、もう 1 つの関数は文字列を読み込み、そこから c-string を変換して返します。値を返す前に値を計算することで、文字列が loadCStringFromFile に適切にロードされていることを確認しました。実際、それは私が考えていたものでした。
/*(inside loadCStringFromFile)*/
const char* result = str.c_str();
std::cout << result << std::endl;//prints out "Heeeyyyyyy" as expected
return result;
では、なぜ値を変更する必要があるのでしょうか。助けてくれてありがとう...