-3
A="D:\Kursa4\a1\a1\test1.txt";
B="D:\Kursa4\a1\a1\test1.txt";
+ A "D:Kursa411 est1.txt" std :: basic_string、std :: allocator>

+ B 0x0046cd0c "D:Kursa411 est1.txt" char *

'\'記号をcharまたはstringに割り当てると、記号が修正されません。'\'を'/'に置き換える必要があります-しかし、' \'と書くと、以下のテキストを示します

この形式でファイル名を読みました。そして、\を/に置き換えたい

ZeroMemory(&of, sizeof(OPENFILENAME));
    of.lStructSize = sizeof( OPENFILENAME );
    of.Flags = OFN_FILEMUSTEXIST| OFN_EXPLORER | OFN_ENABLESIZING; 
    of.lCustData = (DWORD) NULL;
    //of.hwndOwner = hWnd; 
    of.lpstrFilter = L"*.*";
    of.lpstrFile = (LPWSTR)fsFile;
    of.nMaxFile = sizeof(fsFile);
    of.nFilterIndex = 1;
    of.lpstrFileTitle = NULL;
    of.nMaxFileTitle = 0;
    if(GetOpenFileName(&of) == TRUE)
    {
    //IDC_EDIT1
    //HWND hwndEdit1 = GetDlgItem(hWnd,IDC_RADIO1);
    SetWindowText(hwndEdit1, (LPCWSTR)fsFile);
    }

「D:/Kursa4/a1/a1/test.txt」から「D:\ Kursa4 \ a1 \ a1\test1.txt」を作成したい

char B = "D:/Kursa4/a1/a1/test.txt";

ホームメイク?

 char B = "D:\Kursa4\a1\a1\test1.txt";
4

3 に答える 3

4

試す:

A="D:\\Kursa4\\a1\\a1\\test1.txt";
B="D:\\Kursa4\\a1\\a1\\test1.txt";

C ++ソースコードでは、\記号は文字列内の次の記号の意味を変更します。\tたとえば、は「horizo​​ntal-tab」を\n意味し、「new-line」を意味します。

実際の\文字を挿入するには、と入力する必要があります\\

于 2012-05-16T16:06:48.653 に答える
1

あなたの質問を理解するのは非常に難しいですが、私が見るところから、あなたはバックスラッシュを逃れませんでした。

使用する

A="D:\\Kursa4\\a1\\a1\\test1.txt";
于 2012-05-16T16:06:57.237 に答える
1

C++ (および C) では、文字列および文字リテラルでは、円記号は「エスケープ文字」です。つまり、それ自体を表すのではなく、続く文字 (通常は次の文字ですが、場合によってはそれ以上) に特別な意味があることを示します。したがって。"\a"文字列から、文字列または文字リテラルの 2 つの文字シーケンスは、可聴アラームを生成する文字、BEL 文字 (ほとんどのエンコーディングでは 0x07) を意味します。そしてもちろん、"\n"改行文字と"\""引用符文字についてはほぼ確実に見たことがあるでしょう。"\t"タブ文字の場合もかなり頻繁です。

これにより、問題が発生します。文字列リテラルにバックスラッシュを挿入するにはどうすればよいですか。答えは、直接指定できない他の文字を挿入するのと同じ方法です: エスケープ シーケンスを使用します。この場合、 "\\".

最後に、テキストは Windows のファイル名のように見えます。'/'その場合、おそらくディレクトリ区切りとして使用したほうがよいでしょう。少なくとも、エスケープ シーケンスを使用する必要がないため、入力と読み取りがはるかに簡単になります。/表示の目的で、プログラミングをしていないユーザー (両方を知らず\ 、Windows で作業している可能性がある) を混乱させることが心配な場合は、クイック パスを使用std::replaceして表示文字列を修正します。

于 2012-05-16T16:16:20.373 に答える