我正在尝试执行函数remove扩展名是wchar_t或char类型,在for()中,我将void指针转换为wchar_t或char类型,然后出现错误:
表达式必须是指向完整对象类型的指针。
下面的示例代码显示了问题的一个实例。

int RemoveExtension(
    void    *p_str,     /*  Name                        */
    bool    isWchar     /*  true:wchar_t, false:char */
) {
    int ii, len;

    // Get length
    len = (isWchar) ? wcslen( (wchar_t *)p_str ) : strlen( (char *)p_str );

    // Remove extension
    /* wchar_t */
    if( isWchar ) {

        for( ii = 0; ii < len; ii++ ) {
            if( L'.' == (wchar_t *)p_str[ii] ) {  //Error here
                (wchar_t *)p_str[ii] = L'\0';     //Error here
                break;
            }
        }
    }
    /* char */
    else {

        for( ii = 0; ii < len; ii++ ) {
            if( '.' == (char *)p_str[ii]) {       //Error here
                (char *)p_str[ii] = '\0';         //Error here
                break;
            }
        }
    }

    return 0;
}

我不明白这个错误想说什么这里没有对象或结构。

最佳答案

我不知道你为什么会犯这个错误,但是根据this
表达
(wchar_t *)p_str[ii](wchar_t *)(p_str[ii])
((wchar_t *)p_str)[ii]
可能不是你想要的

09-10 04:26
查看更多