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。

 

 

 

 

posted @ 2011-11-07 15:26  refazy  阅读(7036)  评论(0编辑  收藏  举报