printf在linux打印中文出现乱码
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。