找出下面几段代码的错误之处char szName[16];
memcpy(szName,"bqqadmin",16);
----------------------------
char szName[16];
strcpy(szName,"bqqadmin");
if( szName=="bqqadmin" )
{
printf("Ok");
}
-------------------------------
void SetName(LPCTSTR lpszName)
{
char szName[16];
strncpy(szName,lpszName,16);
}
---------------------------------
HRESULT Invoke(BOOL b)
{
HRESULT hr;
if( b )
{
hr = S_OK;
}
return hr;
}

解决方案 »

  1.   

    考试题目吗?memcpy(szName,"bqqadmin",16); // 错误
    strncpy(szName,lpszName,16); // 错误
    if( b ) // 没有else,有错误隐患
    {
    hr = S_OK;
    }
      

  2.   

    char szName[16];
    memcpy(szName,"bqqadmin",16);//会把bqqadmin\0后面的内存所存的东东也拷到szName里。不过不影响使用。===================================
    char szName[16];
    strcpy(szName,"bqqadmin");
    if( szName=="bqqadmin" )//szName是一个地址,而这个地址跟字符串常量"bqqadmin"的地址是不可能相等的,所以永远不可能执行printf("ok")
    {
    printf("Ok");
    }
      

  3.   

    void SetName(LPCTSTR lpszName)
    {
    char szName[16];
    strncpy(szName,lpszName,16);
    }====================
    眼拙,看不出有什么非逻辑错误。
      

  4.   

    HRESULT Invoke(BOOL b)
    {
    HRESULT hr;
    if( b )
    {
    hr = S_OK;
    }
    return hr;//当b为FALSE的时候,hr没有初始化
    }