error C2440: “=”: 无法从“const char (*__w64 )[17]”转换为“char *”
在分析开源代码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。