linux 下运行C的程序,终端运行出现乱码,该怎么解决?!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 下运行C的程序,终端运行出现乱码,该怎么解决?!!相关的知识,希望对你有一定的参考价值。

代码如下:
/*
多进程实现PV操作,子进程为生产者,仓库可以容纳5个物品,每次检查仓库是否满,若不满则执行P操作,生产一个物品放入仓库。父进程检验仓库是否空,若不空则消耗一个物品,执行V操作。sleep函数是随即设置生产或消费所用时间。

程序主要目的是演示信号量的使用,以备以后参考。
*/

#include<stdio.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<sys/types.h>

int main()

int semID,ret,num;
int sleepTime;
struct sembuf buf;

semID = semget(IPC_PRIVATE,1,0666);
if(semID < 0)

printf("创建信号量出错\n");
exit(1);


if(fork() == 0)

while(1)

num = semctl(semID,0,GETVAL,NULL);
if(num < 5)

sleepTime = rand() % 5;
sleep(sleepTime);

buf.sem_num = 0;
buf.sem_op = 1;
buf.sem_flg = 0;

ret = semop(semID,&buf,1);
if(ret < 0)

printf("执行P操作失败!\n");
exit(1);


num = semctl(semID,0,GETVAL,NULL);
printf("生产者生产了一个物品放入了仓库...仓库中现有物品%d个\n",num);



else

while(1)

num = semctl(semID,0,GETVAL,NULL);
if(num > 0)

sleepTime = rand() % 5;
sleep(sleepTime);

buf.sem_num = 0;
buf.sem_op = -1;
buf.sem_flg = 0;

ret = semop(semID,&buf,1);
if(ret < 0)

printf("执行V操作失败!\n");
exit(1);


num = semctl(semID,0,GETVAL,NULL);
printf("消费者从仓库中消耗了一个物品...仓库中现有物品%d个\n",num);




return 0;

运行结果:
������������һ����Ʒ�����˲ֿ�...�ֿ���������Ʒ1�
������������һ����Ʒ�����˲ֿ�...�ֿ���������Ʒ2�
������������һ����Ʒ�����˲ֿ�...�ֿ���������Ʒ3�
������������һ����Ʒ�����˲ֿ�...�ֿ���������Ʒ4�
�����ߴӲֿ���������һ����Ʒ...�ֿ���������Ʒ3�
�����ߴӲֿ���������һ����Ʒ...�ֿ���������Ʒ2�
������������һ����Ʒ�����˲ֿ�...�ֿ���������Ʒ3�
������������һ����Ʒ�����˲ֿ�...�ֿ���������Ʒ4�
�����ߴӲֿ���������һ����Ʒ...�ֿ���������Ʒ3�
该怎么解决啊?这是生产者-消费者的一段代码

参考技术A 在linux下,其实不用选择gb2312,我都用的是utf8,当然也需要按照以上步骤进行设置,肯定不会出现乱码!个人喜好,大家随意!

之前我试了很多方法,比如在/etc/sysconfig/i18n文件中改系统字体,在/etc/my.cnf中[mysqld]字段后加入如下语句default-character-set=gb2312等等,我觉得没有必要。

以上步骤看似很简单,但是我的失败教训,也是我的成功心得。现在与大家分享,看后有收获的,不顶一下就是你的不厚道了!
参考技术B 在Linux下处理汉字的最省力的方法就是统统使用UTF8编码。
locale使用zh_cn.utf-8
源代码使用utf8编码保存。
参考技术C 你好!
初步
判断

汉字的问题吧
你把
汉字
换成对应

字母试试看!
Good
luck
如果对你有帮助,望采纳。
参考技术D 初步 判断 是 汉字的问题吧

你把 汉字 换成对应 的 字母试试看!

Good luck

在Linux系统中,如何运行一个C语言程序?

在Linux系统中,我编写了一个简单的C语言程序,我想在当前系统下运行该程序,我在字符界面下该输入什么命令?

1、打开kali linux的终端。创建一个文件并命名为test.c。在终端输入:touch test.c。

2、可以看到已经生成了一个后缀为test.c的源文件。然后用vim工具打开这个文件并编写代码。在终端中输入:vim test.c或者gvim test.c打开这个文件并编写代码。

3、编写完了这个代码。现在开始编译源文件。在终端中输入:gcc test.cgcc是linux自带的c语言编译器。如果是windows则要用ide工具来编译。linux系统一般写C语言用gcc +vim+gdb三个自带的工具就可以了。

4、打完gcc test.c编译完C源文件。然后就可以看见a.out的文件。一般linux系统就默认为a.out为编译完的文件。现在运行a.out文件。在a.out文件的目录下打开终端并输入./a.out就是运行文件了。

5、如果想要编译完的文件名不要用a.out文件。就可以在编译时打入.gcc test.c -o test.out然后就可以看见有一个test.out.文件 了。-o后面跟着的编译生成的文件名。

6、再运行test.out在终端中输入./test.out结果如图。这样在linux系统下编译并运行C语言就完成了。

参考技术A 在Linux中,可以使用gcc编译器编译C语言程序,生成可执行文件,并最终执行。具体步骤如下:

1、编译。由.c文件生成.o文件,写作:gcc a.c -o a.o -c这个命令可以将a.c编译成a.o。 如果存在多个文件,可以逐个编译,即a.c b.c... 生成a.o b.o...等。
2、链接。由.o文件生成可执行文件,写作:gcc a.o b.o c.o -o a.out这个命令将a.o b.o c.o三个目标文件,生成可执行文件a.out。
3、执行。调用命令:./a.out即可执行生成的可执行文件a.out。
4、注意事项:当文件较少时,可以省略目标文件步骤,编译链接一步执行,如:gcc a.c b.c c.c -o a.out;提供的示例为最基础的编译功能,在实际应用中gcc有很丰富的编译选项,根据需求进行添加;当项目包含文件较多时,可以使用makefile进行管理。

想了解更多有关编程的详情,推荐咨询达内教育。达内教育是引领行业的职业教育公司,致力于面向IT互联网行业,培养软件开发工程师、系统管理员、UI设计师、网络营销工程师、会计等职场人才,拥有强大的师资力量,实战讲师对实战经验倾囊相授,部分讲师曾就职于IBM、微软、Oracle-Sun、华为、亚信等企业,其教研团队更是有独家26大课程体系,助力学生系统化学习,同时还与各大高校进行合作,助力学生职业方向的发展。

感兴趣的话点击此处,免费学习一下
参考技术B 我不太明白你说的是什么意思,Linux下的C编程一般是通过gcc实现的。
例如,创建了一个hello.c文本,在文本中写入
#include <stdio.h>
int main(void)

printf(“hello world!!”);
return 0;

然后在终端输入
$ gcc –o hello hello.c
$ /tmp/hello
注:hello.c文件放在/tmp目录下,通过gcc -o hello hello.c命令生成一个hello文件,它是一个可执行文件,然后直接执行,就可以运行该程序了。
参考技术C 如果已经写好了源文件,那么cd 进所在的目录
gcc filename.c -o filename
./filename本回答被提问者采纳
参考技术D gcc 的编译参数很多,可以查看手册即可按您的编译目的选择编译方式,按一般方法编译之后,可通过指出目标文件的路径来执行,也可以放在环境变量所指出的路径中,直接在终端输入命令执行。

以上是关于linux 下运行C的程序,终端运行出现乱码,该怎么解决?!!的主要内容,如果未能解决你的问题,请参考以下文章

在Linux的终端中显示BMPString的内容

解决Linux终端乱码的两则例子

linux终端下如何进行C语言编译

在Linux系统中,如何运行一个C语言程序?

MacOS自带终端连接ssh制表符出现乱码

linux下如何运行可执行文件