我有一个名为 DirToEmpty
的变量,它保存临时目录的路径。
我有另一个名为 TempBufDir
的变量,它将保持与 DirToEmpty
相同的值,但反斜杠被转义。
预期行为示例:
wchar_t DirToEmpty[MAX_PATH] = TEXT("C:\xxx\yyy\zzz");
wchar_t TempBufDir[MAX_PATH] = TEXT("C:\\xxx\\yyy\\zzz");
为此,我对 TempBufDir
进行了 malloc,并尝试将 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:
最佳答案
除了需要加倍 malloc 参数之外,该循环中还有很多错误,
- i 和 j 作为源索引和目标索引的使用不一致
- 循环条件错误
- 虚假+=
- 添加额外的内容时忘记增加 i\
- 需要添加0终止符
这是我修复它的尝试:
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)。
关于c - 无法将 wchar_t 的内容复制到另一个已 malloc 的 wchar_t var 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285699/