2

まず、これを読んでくれてありがとう。

C++ でファイルを読み込もうとしています。現在、ユーザーがエクスプローラーでファイルを選択できるようにし、これを「std::string」として返すメソッドがあります。次に、このファイルを開く必要がありますが、これには const char* を使用する方法があります。したがって、一方から他方に変換する必要があります。

代わりに文字列を使用してファイルを読み取る簡単な方法が Windows にある場合は、問題全体を解決できるのでお知らせください。

str.c_str() を使用して文字列から const char* に変換すると、最後に多くの奇妙な文字が表示されます。同じ問題で他のトピックを調査しましたが、答えはすべてそれらのプロジェクトに非常に具体的であるように思われるか、代わりにスティング/ベクターに固執するだけです. 明らかに私はこれを喜んで行いますが、文字列/ベクトルを使用してファイルを開く方法はありません。

どんな助けでも大歓迎です:)これが発生する場所のコードと出力を以下に貼り付けます。

*ソース

std::string f;

               if (LOWORD(wParam) == 1) {

                       f = openFile();

                       char *fchar = new char[f.size()+1]; // +1 to account for \0 byte

                       //char *fchar = std::vector[1];

                       std::strncpy(fchar, f.c_str(), f.size());

                       file1 = fchar;

                       std::cout<<"string size: " << f.size() << std::endl;
                       std::cout<<"string: " << f << std::endl;
                       std::cout<<"fchar: " << fchar << std::endl;
                       std::cout<<"file1: " << file1 << std::endl;
               }

出力

 string size: 33
 string: C:\Users\Joseph\Pictures\back_raw
 fchar: C:\Users\Joseph\Pictures\back_raw═²²²²½½½½½½½½¯■
 file1: C:\Users\Joseph\Pictures\back_raw═²²²²½½½½½½½½¯■**
4

3 に答える 3

1

\0必要なすべての場所で、必ず最後に a を付けてください。

于 2012-04-24T21:44:31.723 に答える
1

std::strncpy()文字列の末尾に `\0' 文字を配置しません。http://www.cplusplus.com/reference/clibrary/cstring/strncpy/を参照してください。それもコピーする必要があります:

std::strncpy(fchar, f.c_str(), f.size() + 1);

于 2012-04-19T12:17:54.903 に答える
1

file1 はどこで宣言されていますか? openFile はどうですか?(戻り値の型を知りたい)

その '\0' を手動で入力してみてください。私見、あなたの char* は単に最後に \0 がありません...

于 2012-04-19T12:18:23.690 に答える