MFC读取文件的问题(主要是CString问题)

2025-05-04 12:56:06
推荐回答(4个)
回答(1):

你既然都用了字符串泛型宏_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;
}

回答(2):

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];吧

回答(3):

关于CString的转换CString 的format成员函数不知道行不行,另外,自己总结的一个CString转Flaot/double:

double
a;

CString
B;

a=_tstof(B);
经过vs2010调试

回答(4):

int tempint[10];
&tempint[i+1]数组不都越界了么