printf在linux打印中文出现乱码

chouxiaoya8100 2015-06-14 09:31:41

1.用vs2013写的linux 代码,出现乱码。
代码文件是在windwos共享目录里,把该目录挂在到虚拟机中(mount给centos)

注意: ./test命令后的第一句打印结果,这是乱码。

linux环境: centos7 ,应该是中文系统。安装的时候,是别人帮我装的系统。


[root@localhost ConsoleApplication1]# g++ -o test ConsoleApplication1.o
[root@localhost ConsoleApplication1]# ./test
¸¸½ µ±ǰ½ fork·µ»שd/
0 parent 2528 2639 2640
1 parent 2528 2639 2641
[root@localhost ConsoleApplication1]# 0 child 1 2640 0
1 parent 1 2640 2642
1 child 1 2641 0
1 child 1 2642 0
[root@localhost ConsoleApplication1]# ^C
[root@localhost ConsoleApplication1]#




vs2013写的代码:

#include<stdio.h>
#include<iostream>
#include<unistd.h>
using namespace std;
#ifdef _UNIODE
#define _tmain wmain
#define _TCHAR wchar_t
#else
#define _tmain main
#define _TCHAR char
#endif

int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
printf("父进程 当前进程 fork返回id/\r\n");
//ppid指当前进程的父进程pid
//pid指当前进程的pid,
//fpid指fork返回给当前进程的值
for (i = 0; i<2; i++){
pid_t fpid = fork();
if (fpid == 0)
printf("%d child %4d %4d %4d\r\n", i, getppid(), getpid(), fpid);
else
printf("%d parent %4d %4d %4d\r\n", i, getppid(), getpid(), fpid);
}
return 0;
}



总结该帖的问题:

1. 如何解决 打印结果出现乱码的情况?

2. 如何解决 将_UNICOE这个宏传到g++中? 这样我好编译一份unicode的main函数代码。

3. 最关键的问题。

注意看打印结果。

[root@localhost ConsoleApplication1]# g++ -o test ConsoleApplication1.o
[root@localhost ConsoleApplication1]# ./test
¸¸½ µ±ǰ½ fork·µ»שd/
0 parent 2528 2639 2640
1 parent 2528 2639 2641
[root@localhost ConsoleApplication1]# 0 child 1 2640 0
1 parent 1 2640 2642
1 child 1 2641 0
1 child 1 2642 0
[root@localhost ConsoleApplication1]# ^C
[root@localhost ConsoleApplication1]#

懂fork的人都知道,这个代码预期由一共3个进程。 结果,大家看到了,才出现 两个“root@localhost ConsoleApplication1”,

这是否说明,才有2个进程?

我是从vc过来的, vc是无法把 2个不同的进程(控制台程序)打印到同一个cmd下的。

linux似乎不像windows, 3个进程却只有2个root@localhost ConsoleApplication1。


...全文
1286 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可以肯定是编码不符的问题
707wk 2015-06-14
  • 打赏
  • 举报
回复
编码格式不一致吧...
mewiteor 2015-06-14
  • 打赏
  • 举报
回复
export LANG=zh_CN.UTF-8
ztenv 版主 2015-06-14
  • 打赏
  • 举报
回复
字库装了没有?是不是在终端软件上乱码?(这种方式可以通过设置编码格式来解决)
chouxiaoya8100 2015-06-14
  • 打赏
  • 举报
回复
引用 10 楼 u013823407 的回复:
基本上大家都说过了,应该是编码的问题,我原先也遇到过,问题的现象就是用英文就没有问题,输出汉字就有问题了,是在开发环境的设置中增加了编译参数解决的,约略就是 加了 -D_UNICOE。你找一找试试。
g++ -D_UNICOE -c ConsoleApplication1.cpp 依然乱码 首先不考虑乱码的问题。 最棘手的问题: 是第3个问题。 注意看打印结果。 [root@localhost ConsoleApplication1]# g++ -o test ConsoleApplication1.o [root@localhost ConsoleApplication1]# ./test ¸¸½ µ±ǰ½ fork·µ»שd/ 0 parent 2528 2639 2640 1 parent 2528 2639 2641 [root@localhost ConsoleApplication1]# 0 child 1 2640 0 1 parent 1 2640 2642 1 child 1 2641 0 1 child 1 2642 0 [root@localhost ConsoleApplication1]# ^C [root@localhost ConsoleApplication1]# 懂fork的人都知道,这个代码预期由一共3个进程。 结果,大家看到了,才出现 两个“root@localhost ConsoleApplication1”, 这是否说明,才有2个进程? 我是从vc过来的, vc是无法把 2个不同的进程(控制台程序)打印到同一个cmd下的。 linux似乎不像windows, 3个进程却只有2个root@localhost ConsoleApplication1。
chouxiaoya8100 2015-06-14
  • 打赏
  • 举报
回复
引用 8 楼 jerry_dqh 的回复:
第三个问题,你在主线程pause一下,不然有可能子线程还没有启动,主线程就已经结束了。
主进程结束, 不会影响到子进程, 是不是? 最多成为孤儿进程。 所以的你的答案不对
u013823407 2015-06-14
  • 打赏
  • 举报
回复
基本上大家都说过了,应该是编码的问题,我原先也遇到过,问题的现象就是用英文就没有问题,输出汉字就有问题了,是在开发环境的设置中增加了编译参数解决的,约略就是 加了 -D_UNICOE。你找一找试试。
chouxiaoya8100 2015-06-14
  • 打赏
  • 举报
回复
引用 7 楼 jerry_dqh 的回复:
2. 如何解决 将_UNICOE这个宏传到g++中? 这样我好编译一份unicode的main函数代码。 >> 添加 -D_UNICOE
g++ -D_UNICODE -c 源文件?
碼上道 2015-06-14
  • 打赏
  • 举报
回复
第三个问题,你在主线程pause一下,不然有可能子线程还没有启动,主线程就已经结束了。
碼上道 2015-06-14
  • 打赏
  • 举报
回复
2. 如何解决 将_UNICOE这个宏传到g++中? 这样我好编译一份unicode的main函数代码。 >> 添加 -D_UNICOE
chouxiaoya8100 2015-06-14
  • 打赏
  • 举报
回复
up 起来, 木有高手?
chouxiaoya8100 2015-06-14
  • 打赏
  • 举报
回复
剩余2个问题,如何解决》? 没有人知道吗?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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