c语言中为什么将数组(数组内都是数字)以字符串格式输出会打印出中文?
这个问题涉及字符编码和数组存储机制。让我们用一个例子来解释。首先,让我们看看下面的简单程序及其运行结果,如下图所示:
首先,我们定义了两个数组str1和str2,一个用汉字初始化,另一个用字节数方式初始化,如第11行所示。表面上看,这两个阵列是完全不同的。让我们以不同的方式输出它们的内容。首先,分别在第13行和第14行以字符串的形式输出它们的内容。右边的程序执行结果显示,它们输出的内容相同——欢迎来到西安。此外,我们还定义了一个数组arr1并通过数字为其赋值。代码是12行。在15行中,我们将arr1转换为字符串并输出其内容。我们也得到了同样的结果。接下来,我们以数字方式输出str1、str2和pstr3的内容。见本准则第17-28行。在右边的输出结果中,我们可以看到相同的内容以三种方式输出。
从上面的程序可以看出,虽然数组以不同的方式初始化和分配,但是使用相同的输出方法将获得相同的输出结果。可见它们的实质是一样的。
为什么会这样?它涉及到字符的存储。我们知道,计算机内部的数据是由0和1组成的二进制数。为了表示字符,我们需要对它们进行编码。因为计算机技术最初是从美国发展起来的,原来的ascii编码只包括英文字母、数字和控制字符,总共256个字符。后来,随着计算机的发展,应用越来越广泛,其他国家为了使计算机能够处理自己的语言,他们发明了很多其他的编码方法,各种编码方法之间存在着严重的兼容性问题,所以为了统一,后来人们提出了unicode编码。在这种编码模式下,每个汉字存储在两个字节中。如果输出为字符串,将显示字符的内容。如果输出为数字,则显示其编码。
目前,大多数现代编译器开始使用unicode编码字符串。例如,当我使用vs2017时,数组内容是数字,但可以输出中文字符。如果用一些旧的编译器替换相同的代码,可能无法输出汉字,但会输出一些乱七八糟的代码。
原文标题:c语言scanf输入数组 C语言中为什么将数组(数组内都是数字)以字符串格式输出会打印出中文?,如若转载,请注明出处:https://www.saibowen.com/news/21984.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「赛伯温」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。