在分析开源代码Notepad++ 1.0版本时,在vs2008中对源码进行编译,出现error C2440: “=”: 无法从“const char (*__w64 )[17]”转换为“char *”错误,
void Notepad_plus::setLangStatus(LangType langType)
{
char *pStr;
switch (langType)
{
case L_C:
pStr = &("c source file");
break;
case L_H:
pStr = &("c or c++ header file");
break;
case L_CPP:
pStr = &("c++ source file");
break;
case L_JAVA:
pStr = &("Java source file");
break;
case L_RC :
pStr = &("Windows Resource file");
break;
case L_MAKEFILE:
pStr = &("Makefile");
break;
case L_HTML:
pStr = &("Hyper Text Markup Language File");
break;
case L_XML:
pStr = &("eXtensible Markup Language File");
break;
case L_PHP:
pStr = &("php File");
break;
case L_NFO:
pStr = &("NFO File");
break;
case L_USER:
pStr = &("User Define File");
break;
case L_M30 :
pStr = &("Macocs Script File");
break;
case L_PCOM:
pStr = &("PCOM Script File");
break;
default:
pStr = &("Normal text File");
}
_statusBar.setText(pStr);
}
错误就是出在以上代码中,
将代码改为
void Notepad_plus::setLangStatus(LangType langType)
{
char *pStr;
switch (langType)
{
case L_C:
pStr = "c source file";
break;
case L_H:
pStr = "c or c++ header file";
break;
case L_CPP:
pStr ="c++ source file";
break;
case L_JAVA:
pStr ="Java source file";
break;
case L_RC :
pStr = "Windows Resource file";
break;
case L_MAKEFILE:
pStr ="Makefile";
break;
case L_HTML:
pStr = "Hyper Text Markup Language File";
break;
case L_XML:
pStr = "eXtensible Markup Language File";
break;
case L_PHP:
pStr = "php File";
break;
case L_NFO:
pStr = "NFO File";
break;
case L_USER:
pStr = "User Define File";
break;
case L_M30 :
pStr ="Macocs Script File";
break;
case L_PCOM:
pStr ="PCOM Script File";
break;
default:
pStr ="Normal text File";
}
_statusBar.setText(pStr);
}
这样改了后,就可以编译通过了
同时,测试了以下代码
int main()
{
char *p;
p="dddd";
//char p[10];
//strcpy(p,"ddd");
return 0;
}
char p[10]定义了一个字符串数组,对于数组不能直接采用赋值操作,可以采用strcpy函数。
"dddd"是const char 型 ,p="dddd"相当于将字符串常量的首地址赋给了p。