c语言字符输出出现汉字乱码 c语言输出乱码怎么解决?
c语言输出乱码怎么解决?
1. 如果字符串数组中的每个字符都分配了一个值,请在每个字符串的最后一个字符后添加“0”,以指示字符串的结尾,输入时不会出现不必要的乱码,因为gets()或scanf()的%s会在字符串结尾后主动添加“0”。
C语言中为什么将数组(数组内都是数字)以字符串格式输出会打印出中文?
此问题涉及字符编码和数组存储机制。让我们用一个例子来解释。首先,让我们看看下面这个简单的程序及其运行结果,如下图所示:
首先,我们定义了两个数组STR1和STR2,一个以汉字形式初始化,代码的第10行,另一个字节数初始化,见代码的第11行。表面上看,这两个阵列是完全不同的。让我们以不同的方式输出它们的内容。首先,分别在第13行和第14行以字符串的形式输出它们的内容。右边的程序执行结果显示,它们输出的内容相同——欢迎来到西安。此外,我们还定义了一个数组Arr1并通过数字为其赋值。代码是12行。在15行中,我们将Arr1转换为字符串并输出其内容。我们也得到了同样的结果。接下来,我们以数字方式输出STR1、STR2和pstr3的内容。见本准则第17-28行。在右边的输出结果中,我们可以看到相同的内容以三种方式输出。
从上面的程序可以看出,虽然数组以不同的方式初始化和分配,但是使用相同的输出方法将获得相同的输出结果。可见它们的实质是一样的。
为什么会这样?它涉及到字符的存储。我们知道,计算机内部的数据是由0和1组成的二进制数。为了表示字符,我们需要对它们进行编码。因为计算机技术最初是从美国发展起来的,原来的ASCII编码只包括英文字母、数字和控制字符,总共256个字符。后来,随着计算机的发展,应用越来越广泛,其他国家为了使计算机能够处理自己的语言,他们发明了很多其他的编码方法,各种编码方法之间存在着严重的兼容性问题,所以为了统一,后来人们提出了Unicode编码。在这种编码模式下,每个汉字存储在两个字节中。如果输出为字符串,将显示字符的内容。如果输出为数字,则显示其编码。
目前,大多数现代编译器开始使用Unicode编码字符串。例如,当我使用vs2017时,数组内容是数字,但可以输出中文字符。如果用一些旧的编译器替换相同的代码,可能无法输出汉字,但会输出一些乱七八糟的代码。
c语言字符输出出现汉字乱码 怎么输出字符数组 输出字符串后面有乱码
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。