我在這裏花了很多時間尋找關於顯然是一個常見錯誤的幫助,但沒有一個我見過似乎適合我的情況。錯誤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