你既然都用了字符串泛型宏_T()了
那就用_stscanf_s吧,这样不管是UNICODE还是多字节字符集都可以
还有你scanf里用CString是肯定不行的 scanf是向一个缓冲区中填东西
CString在空构造下显然是不会分配内存的,内部的指针是NULL,属于禁止访问内存区,
肯定报Access violation错误;
应该用TCHAR buff[21]
你可以这样:
CString str;
int tempint[10];
CString tempstr[5];
TCHAR buff[21];
for( int i = 0 ; i < 10 ; i += 2 )
{
tempfile.ReadString( str );
_stscanf_s( str , _T("%6d%6d%20s"), &tempint[i], &tempint[i+1], buff, _countof(buff));
tempstr[i/2] = buff;
}
LPSTR 是 STR
LPCTSTR 是 TSTR
你的字符编码选的是Unicode吗?
swscanf
功能:
用于处理宽字符字符串,和sscanf功能相同
所以判断你的是宽字符了
那么,你把 (LPSTR)(LPCTSTR)str 肯定有问题,宽字符被强制转换为“窄”字符了,wchar -> char
CString tempstr[5];
使用tempstr[i/2],不对,你应该至少先把tempstr[i/2]设置一个Capacity之后,再GetBuffer用到这里
否则你还是换成 TCHAR [5][21];吧
关于CString的转换CString 的format成员函数不知道行不行,另外,自己总结的一个CString转Flaot/double:
double
a;
CString
B;
a=_tstof(B);
经过vs2010调试
int tempint[10];
&tempint[i+1]数组不都越界了么