我有一个名为DirToEmpty
的var,它保存了temp dir的路径。
我有另一个名为TempBufDir
的var,它将保持与DirToEmpty
相同的值,但反斜杠已转义。
预期行为的示例 :
wchar_t DirToEmpty[MAX_PATH] = TEXT("C:\xxx\yyy\zzz");
wchar_t TempBufDir[MAX_PATH] = TEXT("C:\\xxx\\yyy\\zzz");
为此,我malloc' d TempBufDir
,并尝试将每个字符从DirToEmpty
复制到TempBufDir
。
以下是代码:
// 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('\\');
}
}
但是,一旦我执行程序,程序似乎就会崩溃。
请参阅帖子底部的屏幕截图。
编辑:如果删除最后一个for
循环,程序似乎就退出了。所以我认为它与 缓冲区大小 相关?
编辑2 :我将malloc
行更改为:
wchar_t * TempBufDir = (wchar_t *) malloc (lpBufSize * sizeof(wchar_t));
这并没有改变任何事情。程序仍然崩溃。
编辑3 :
答案 0 :(得分:1)
除了需要加倍malloc参数外,该循环中还有一堆错误,
我试图修复它:
for (int i = 0, j = 0; *(DirToEmpty+j); i++, j++) {
*(TempBufDir + i) = *(DirToEmpty + j);
if (*(DirToEmpty + j) == TEXT('\\')) {
*(TempBufDir + (i + 1)) = TEXT('\\');
i++;
}
}
TempBufDir[i] = 0;
顺便说一下,在C中,如果p是指针而i是整数,则*(p + i)与p [i]相同。 你应该使用DirToEmpty [i]而不是*(DirToEmpty + 1)。