5

これは主に WinAPI RegSetValueEx に関する質問です。ここでMSDNの説明を見ると、次のことがわかります。

lpData [入力] 格納するデータ。

REG_SZ、文字列は null で終了する必要があります。REG_MULTI_SZ データ型では、文字列は 2 つの null 文字で終了する必要があります。バックスラッシュの前には、エスケープ文字として別​​のバックスラッシュを付ける必要があります。たとえば、文字列「C:\mydir\myfile」を格納するには、「C:\\mydir\\myfile」を指定します。

私が持っている質問は、本当にスラッシュをエスケープする必要がありますか? 私は以前にそれをしたことがなく、完全にうまくいったからです。

4

2 に答える 2

8

これは確かにドキュメントのエラーです。ここでバックスラッシュをエスケープする必要はありません。この API に送信する正確な文字列が、レジストリに保存されます。バックスラッシュの処理は行われません。

現在、C および C++ で文字列リテラル内の特定の文字をエスケープする必要があるのは事実ですが、これは Win32 API ドキュメントには関係ありません。これは、特定の言語のソース コードからオブジェクト コードへの変換の問題であり、このドキュメントの権限をはるかに超えています。

于 2012-04-14T08:06:34.297 に答える
2

はい、\C++ では意味があるため\\、通常のバックスラッシュを意味します。

文字列に\現れると、C++ コンパイラは次の文字を見て、その組み合わせを何かに変換します (たとえば\n、「改行」文字に変換されます)。\\通常のバックスラッシュに変換されます。これは「エスケープ」と呼ばれます (歴史的に、古い端末では、キーボードにない多くのキーに ESC+キーの組み合わせが使用されていました)。

于 2012-04-14T07:38:48.320 に答える