C语言中,字符与字符串的区别是啥?(详细点)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中,字符与字符串的区别是啥?(详细点)相关的知识,希望对你有一定的参考价值。

字符是用一个字节表示的的单个符号,而字符串就是多个字符的集合。
在c语言里,字符一般用单引号表示,如‘a’,而字符串用双引号如”abcd“.一个字符串也可以看做是字符数组。
参考技术A 字符常量就是只存储一个字符,常量就是其值初始化后就不能改变,c语言中字符串用字符数组或字符指针存储,而在c++中专门有string类,很方便 参考技术B 字符是单引号如‘q’,字符串是双引号“q”追问

不能就这么少吧,明天要考试了,求详解👍

追答

这就是区别啊

C语言中的“宽字符串”是啥?

【中文标题】C语言中的“宽字符串”是啥?【英文标题】:What is a "wide character string" in C language?C语言中的“宽字符串”是什么? 【发布时间】:2012-07-02 11:39:54 【问题描述】:

我在书中看到了这个:

wscanf(L"%lf", &variable);

第一个参数的类型为wchar_t *

这与scanf("%lf", &variable); 不同,其中第一个参数的类型为char *

那么有什么区别呢。我以前从未听说过“宽字符串”。我听说过一种叫做 Raw String Literals 的东西,它按原样打印字符串(不需要转义序列之类的东西),但这不是 C 语言。

【问题讨论】:

从这里开始joelonsoftware.com/articles/Unicode.html 第一个参数实际上是wchar_t []类型,与wchar_t *略有不同。 【参考方案1】:

宽字符的确切性质是(有目的地)左实现定义的。

当他们第一次发明wchar_t 的概念时,ISO 10646 和 Unicode 仍在相互竞争(而现在它们主要是合作)。他们并没有试图规定一个国际字符将是一个或另一个(或可能完全是其他东西),而是提供了一种类型(和一些函数),实现可以定义该类型以支持他们选择的国际字符集。

不同的实现发挥了变化的潜力。例如,如果您在 Windows 上使用 Microsoft 的编译器,wchar_t 将是一个 16 位类型,包含 UTF-16 Unicode(最初它包含 UCS-2 Unicode,但现在已正式过时)。

在 Linux 上,wchar_t 通常是 32 位类型,包含 UCS-4/UTF-32 编码的 Unicode。将 gcc 移植到至少其他一些操作系统的端口也是如此,尽管我从未尝试确认它总是如此。

但是,不能保证这一点。至少在理论上,Linux 上的实现可以使用 16 位,或者 Windows 上的实现可以使用 32 位,或者任何一个都可以决定使用 64 位(尽管在现实中看到这一点我会有点惊讶)。

在任何情况下,打算工作的总体思路是,单个wchar_t 足以表示一个代码点。对于 I/O,数据旨在从外部表示(无论它是什么)转换为wchar_ts,这(应该)使它们相对容易操作。然后在输出过程中,它们再次转换为您选择的编码(可能与您读取的编码完全不同)。

【讨论】:

其他非linux unix呢?另外,这不是 glibc 而不是 linux 的属性吗? 正如我所说,不,不能保证:“理论上,Linux 上的实现可以使用 16 位”。就非 Linux Unix 而言,我最近还没有足够聪明地发表评论。【参考方案2】:

“宽字符串”是指字符串中字符的编码。

来自Wikipedia:

宽字符是一种计算机字符数据类型,通常具有 大小大于传统的 8 位字符。增加的 数据类型大小允许使用更大的编码字符集。

UTF-16 是最常用的宽字符编码之一。

此外,wchar_t 由Microsoft 定义为unsigned short(16-bit) 数据对象。这可能并且很可能是其他操作系统或语言中的不同定义。

摘自以下评论中的***文章:

"wchar_t 的宽度是编译器特定的,可以小到 8 位。因此,需要跨任何 C 或 C++ 编译器不应该使用 wchar_t 来存储 Unicode 文本。这 wchar_t 类型用于存储编译器定义的宽字符, 在某些编译器中可能是 Unicode 字符。”

【讨论】:

根据***,它不可移植:en.wikipedia.org/wiki/Wide_character @quantum231,wiki 的答案实际上只适用于 MSFT。阅读 Jerry 的回答和 Joel 博客文章

以上是关于C语言中,字符与字符串的区别是啥?(详细点)的主要内容,如果未能解决你的问题,请参考以下文章

C语言的单引号是啥意思

c语言sprintf是啥意思,和printf神马区别

C语言的字符数组和字符串的区别

c语言中 int型变量与char型变量啥情况下不能互换,请举个例子说明(详细点)

java语言中集合与数组的区别是啥?

c语言字符型和字符串型的区别?