我在这里花了很多时间寻找关于显然是一个常见错误的帮助,但没有一个我见过似乎适合我的情况。错误C2440:'=':无法从'const char *'转换为'char *'
我正在将用Visual Studio 6 C++编写的旧外源程序迁移到Visual Studio 2012,幸运的是我不是C++程序员(只是一个低级的VB和C#开发人员)。迁移向导和互联网对帮助我找到并更正向导无法处理的代码非常有帮助。
在该代码块我相信这是什么都不做不是创建一个目录
int CreateAllDirectories(const char* pszDir)
{
char* pszLastSlash;
char cTmp;
if(_access(pszDir, 0) != -1) {
// it already exists
return 0;
}
pszLastSlash = strrchr(pszDir, '\\');
if (pszLastSlash) {
cTmp = *pszLastSlash;
*pszLastSlash = '\0';
// try again with one less dir
CreateAllDirectories(pszDir);
*pszLastSlash = cTmp;
}
if (_mkdir(pszDir) == -1) {
return -1;
}
return 0;
}
一个错误生成时strrchr的结果(pszDir,“\”)被分配给更变量pszLastSlash。从这段代码的其余部分看起来像pszLastSlash = strrchr(pszDir,'\');是一个有效的表达。
问题是双反斜杠对我来说,看起来像和转义序列。
是的,这就是答案。你也可以建议把'const char * pszDir'改成'char * pszDir',因为它可以在函数内部改变。或者复制一份。 – soon 2013-05-01 16:21:27
所以你建议他尝试改变'CreateAllDirectories()'上的'pszDir'参数来获得解脱? – 2013-05-01 16:21:42
@Soon:感谢您的评论,更新。我认为他应该只改变pszDir的常量,如果他知道可以安全地写入... – Jimbo 2013-05-01 16:25:33