2016-05-22 4 views
-4

基本的に私が求めていることは次のとおりです。Unicodeデータがマルチバイトとして解析されるとプログラムがクラッシュしますか?

私はPathFindFileNameAをユニコード対応パスで使用しています。私はGetModuleFileNameAを経由して、このパスを取得するが、このAPIは、Unicode文字(たとえば、イタリア語の文字)をサポートしていませんので、それは、システム・パスのその部分での出力ジャンク文字がなります。

のはxを想定してみましょうは、以下のようなファイルパスにジャンク文字を表し:

C:\Users\xxxxxxx\Desktop\myfile.sys

私はPathFindFileNameAはちょうどそれが最後の\\に遭遇するまでstrtokで文字列を解析し、中に残りを出力することを前提としstr_length - pos_of_lastが与えられたあらかじめ割り当てられたバッファ\\

PathFindFileNameAは、ユニコード変換に失敗した場合の迷惑メールに遭遇した場合(マルチバイトAPIの逆数が呼び出されたため)、文字列を正しく解析するのか、それともプログラムをクラッシュさせるのでしょうか。

は「ちょうどAPIのワイドバージョンを使用する」「まあちょうどMultiByteToWideCharを使用する」、またはのようなものを答えないでください。具体的な質問をしていますが、具体的な回答が得られるでしょう。

ありがとうございます!

+0

ドキュメントは、あなたがこれを行うには許可されていることを言っていないので、あなたはそれが危険であることを考慮すべきです。 –

+0

@HarryJohnston公正であるために、ドキュメントには多くのことは言及されていません。しかし、私はそれをあなたの言葉を取るでしょう。 –

+1

システムはUnicodeデータで動作します。なぜあなたはできないのですか?あなたはまだWindows 98をサポートしていますか? –

答えて

-1

あなたは、WindowsのAPIのみをstrtokはないと思いますなぜ? win10がリリースされる前に、xxAのすべてのAPIがxxWのAPIにリダイレクトされていると聞いていました。

そして、私はこの質問への答えは非常に簡単だと思います。簡単なプログラムを書いて、コードページをあなたが望むものに設定するだけです。そのプログラムを実行すると、答えが出ます。

P.S.:Person:私は、Windowsがイメージ名をUNICODE_STRINGとして内部的に保存するので、迷惑文字があっても、GetModuleFileNameAが正しく動作すると思います。 MBCSを使用していても、迷惑コードにはゼロバイトが含まれておらず、strncpyを使用しているので通常通り動作します。私の最後の答え:)のために申し訳ありません

+0

Err、Windows 10では何が変更されましたか?彼らは最終的にANSI APIを排除しましたか?また、個々のプログラムは独自のコードページを設定しません。 ANSI APIを呼び出すと、システムコードページが表示されます。 –

+0

@CodyGray Win10の前に、単にUnicode APIにブレークポイントを設定することができます。しかし、私はwin10では、このトリックはうまくいかないと聞きました。多くの人々は、ANSIファミリーのAPIが最終的に分離されると考えています。 –

関連する問題