我正在尝试执行函数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]
,
可能不是你想要的