请教一下wstring输出的问题

[复制链接]
查看11 | 回复10 | 2021-1-27 05:13:52 | 显示全部楼层 |阅读模式
C++小白向大神们请教一下
staticintoutput_fa_and_child(structtree*fa)
{
printf("进程PID:%d\t进程名:%ws\n",fa->elem.processID,fa->elem.processName.c_str());
structtree*vy=fa->FirstChild;
while(vy){
output_fa_and_child(vy);//递归调用
vy=vy->NextBro;
}
return0;
}
这串代码,基本上都能输出进程名,但有一些进程没法输出进程名,甚至后面的换行符也不起作用了,想问问大神们是什么问题导致的。


分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
进程没有名称很正常。
输入输出的时候先检测下,不然指向unsignedshortt[10]={0x0fff};这样的随意空间就会产生这样的状况。
回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
可能是进程名包含中文,中文的GBK编码在中文Windows的控制台下是能正常显示的,如果是中文的宽字符串(即Unicode)的,则中文部分显示会有问题。参见https://blog.csdn.net/binaryhead/article/details/109993588
回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
要看看你tree里面先前的处理是怎样的
回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
staticintoutput_fa_and_child(structtree*fa)
{
printf("\xe8\xbf\x9b\xe7\xa8\x8bPID:%d\t\xe8\xbf\x9b\xe7\xa8\x8b\xe5\x90\x8d:%s\n",fa->elem.processID,fa->elem.processName.c_str());
structtree*vy=fa->FirstChild;
while(vy){
output_fa_and_child(vy);
vy=vy->NextBro;
}
return0;
}

回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊GBK:0xB00xA1,Unicode-16LE:0x4A0x55,Unicode-16BE:0x550x4A,UTF-8:0xE50x950x8A

回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
引用5楼赵4老师的回复:对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊GBK:0xB00xA1,Unicode-16LE:0x4A0x55,Unicode-16BE:0x550x4A,UTF-8:0xE50x950x8A
这是你一直强调的对电脑而言没有乱码,其实是抬杠。我们人眼看到电脑显示字符是乱码,说是电脑乱码不对吗?在电脑中,以一种编码格式的字符编码值,强行解释为另外一种编码格式,就会出现乱码的。你上面的程序printf("\xe8\xbf\x9b\xe7\xa8\x8b...,在机器上运行过吗?不是乱码吗?


回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
乱码只是因为你不知道你用来输出的终端或窗口是否支持utf8编码的汉字显示。
回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
chcp65001
试试
回复

使用道具 举报

千问 | 2021-1-27 05:13:52 | 显示全部楼层
打了个断点试了试,发现是wstring乱码了,之前获取进程名称的时候不是乱码的,存到树结构里就乱码了。。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行