私はと呼ばれるvarを持っています。これはtemp dirへのパスを保持しています。wchar_tの内容をmallocされた別のwchar_t varにコピーできませんでしたか?
TempBufDir
と呼ばれる別のvarがありますが、これはDirToEmpty
と同じ値を保持しますが、バックスラッシュはエスケープされます。
例の予想される動作このため
wchar_t DirToEmpty[MAX_PATH] = TEXT("C:\xxx\yyy\zzz");
wchar_t TempBufDir[MAX_PATH] = TEXT("C:\\xxx\\yyy\\zzz");
、私はTempBufDir
をmallocさ、及びTempBufDir
にDirToEmpty
から各文字をコピーしようとしました。ここで
コードです:
// Count number of backslashes
int backslashes = 0;
for (int i = 0; *(DirToEmpty + i); i++) {
if (*(DirToEmpty + i) == TEXT('\\')) {
backslashes += 1;
}
}
// Size of TempBufDir = Length of DirToEmpty + backslashes(escaped) + 1
size_t lpBufSize = wcslen(DirToEmpty) + backslashes + 1;
wchar_t * TempBufDir = (wchar_t *) malloc (lpBufSize);
if (TempBufDir == NULL) {
return 9;
}
for (int i = 0, j = 0; *(DirToEmpty)+i; i++, j++) {
// Copy the char
*(TempBufDir + i) += *(DirToEmpty + j);
// If the char is a backslash, add another one to escape it
// If kth element is a backslash, k+1th element should also be a backslash
if (*(DirToEmpty + j) == TEXT('\\')) {
*(TempBufDir + (i + 1)) = TEXT('\\');
}
}
しかし、プログラムはすぐに私はプログラムを実行するとクラッシュするようです。
投稿の下部にあるスクリーンショットを参照してください。
EDIT:私は最後のfor
ループを削除すると、プログラムが正常に終了しているようです。だから私はそれがバッファーサイズに関連していると仮定します。?
EDIT 2:これは何も変わっていない
wchar_t * TempBufDir = (wchar_t *) malloc (lpBufSize * sizeof(wchar_t));
:私はへmalloc
ラインを変更しました。プログラムはまだクラッシュします。
EDIT 3:
コードの最初の行を見ると、 'wchar_t DirToEmpty'は' wchar_t * DirToEmpty'ですか? –
実際に*実際のコード*を投稿する必要があります。 –
おそらくあなたの問題とは無関係です: 'wchar_t'や' wcslen() 'のようなものをハードコーディングするなら、' TEXT() 'マクロを使うべきではありません。代わりに' L '\\' 'を実行してください。 –