发个小问题,关于_stscanf的用法。

码丁农 2007-11-23 11:24:22

#include <stdio.h>
#include <windows.h>
#include <tchar.h>
void main(){
LPTSTR ch=_T("China 中国");
TCHAR szPY[20],szHZ[20];
int len;
_stscanf(ch,_T("%s %s"),szPY,szHZ);
len=_tcslen(ch);
printf("%s\n",szPY);
printf("%s\n",szHZ);
printf("%c\n",szPY[0]);
printf("%d\n",len);
}

当工程是MBCS的时候运行正常,设置为UNICODE的时候,程序就崩溃了,我调试发现
问题应该出在_stscanf这一行,但找不出来,谢谢帮忙了。
...全文
1050 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
码丁农 2007-12-06
  • 打赏
  • 举报
回复
问题解决,得到一个小小的结论:cmd窗口只能显示多字节字符,而无法显示宽字符,至少我认为是这样。
下面是代码:
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
void _tmain(){
TCHAR ch[]=_T("China 中国");
TCHAR szPY[20],szHZ[20];
int len,lenHZ,lenPY,lenCH;
char *newHZ,*newPY,*newCH;

len=_tcslen(ch);

_stscanf(ch,_T("%s %s"),szPY,szHZ);

lenHZ=WideCharToMultiByte(CP_ACP,0,szHZ,-1,NULL,0,NULL,NULL);
newHZ=(char*)malloc(lenHZ);
WideCharToMultiByte (CP_ACP,0,szHZ,-1,newHZ,lenHZ,NULL,NULL);

lenPY=WideCharToMultiByte(CP_ACP,0,szPY,-1,NULL,0,NULL,NULL);
newPY=(char*)malloc(lenPY);
WideCharToMultiByte (CP_ACP,0,szPY,-1,newPY,lenPY,NULL,NULL);

lenCH=WideCharToMultiByte(CP_ACP,0,ch,-1,NULL,0,NULL,NULL);
newCH=(char*)malloc(lenCH);
WideCharToMultiByte (CP_ACP,0,ch,-1,newCH,lenCH,NULL,NULL);


_tprintf(_T("%S\n"),newCH);
_tprintf(_T("%S\n"),newPY);
_tprintf(_T("%S\n"),newHZ);
_tprintf(_T("%d\n"),len);
_tprintf(_T("%d\n"),strlen(newHZ));

free(newHZ);
free(newPY);
}
yxz_lp 2007-11-23
  • 打赏
  • 举报
回复
晕了,自己测试一下,没问题。

void _tmain()
{

LPTSTR ch=_T("China 中国");
TCHAR szPY[20],szHZ[20];
int len;
_stscanf(ch,_T("%s %s"),szPY,szHZ);
len=_tcslen(ch);
wprintf(_T("%s\n"),szPY);
wprintf(_T("%s\n"),szHZ);
wprintf(_T("%c\n"),szPY[0]);
wprintf(_T("%d\n"),len);

}
码丁农 2007-11-23
  • 打赏
  • 举报
回复
还是不行啊
yxz_lp 2007-11-23
  • 打赏
  • 举报
回复
void main(){ //改成void _tmain(){
码丁农 2007-11-23
  • 打赏
  • 举报
回复
这儿_stscanf不是 swscanf吗,怎么期望参数成const char*了,不应当是const wchar_t*吗
yxz_lp 2007-11-23
  • 打赏
  • 举报
回复
LPTSTR,TCHAR不就被解析为wchar_t*和wchar_t吗//可以
//但是
int sscanf(
const char *buffer,//期望的参数是const char *
const char *format [,
argument ] ...
);
码丁农 2007-11-23
  • 打赏
  • 举报
回复
LPTSTR,TCHAR不就被解析为wchar_t*和wchar_t吗
yxz_lp 2007-11-23
  • 打赏
  • 举报
回复
int swscanf(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
码丁农 2007-11-23
  • 打赏
  • 举报
回复
没有人帮我吗
码丁农 2007-11-23
  • 打赏
  • 举报
回复
又发现了一个问题,当工程设置为UNICODE时,对于这段代码:

void main(){
TCHAR *ch=_T("China");
_tprintf(_T("%s\n"),ch);
}


显示没有问题,但是

void main(){
TCHAR *ch=_T("中国");
_tprintf(_T("%s\n"),ch);
}

却什么也不显示,这是怎么回事啊
码丁农 2007-11-23
  • 打赏
  • 举报
回复
自己顶一下
码丁农 2007-11-23
  • 打赏
  • 举报
回复
仍然是在MBCS下没问题,改为UNICODE就崩

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧