在互联网上,我发现C编程中char的信息如下:
Datatype Size Range Format
char 1 byte −128 to 127 %c
signed char 1 byte −128 to 127 %c
unsigned char 1 byte 0 to 255 %c
但是我知道有char(数据类型)的格式%s,它用于处理字符串。我的问题是:这两种格式的大小和范围是否有差异?谢谢大家!
A char
是单个字符/字母,例如用"%c"
打印,例如一个'X'
。用"%s"
打印的内容是一个由多个字符组成的零终止字符串,可以用例如"foobar"
。请注意不同的引号。(顺便说一句,在处理它们并尝试存储它们时,一个常见的错误是没有足够的空间来存储最后的零。通常需要的空间比显而易见的还要多。)]
比较https://en.cppreference.com/w/cpp/io/c/fprintf
%s
通常指的“范围”很难定义。可能是书籍。
有时用%s
打印的内容称为“ C伪字符串”,但没有这样的数据类型。
C中的字符串的定义就像一个字符数组,其中包含以零字符'\ 0'终止的一系列字符。
例如,字符串文字"Hello"
具有类型char[6]
(请考虑终止的零字符)。因此,运算符sizeof( "Hello" )
产生值6
。
转换说明符%s
指定输出字符串,并等待一个指向字符串第一个字符的指针。字符串的大小仅受所用系统的资源限制,并且不能大于size_t
类型中存储的最大值。
Th转换说明符%c
设计为输出类型为char
的标量对象。类型为char
的对象的大小等于1
(sizeof(char )
等于1
)。请记住,在C字符文字中,类型为int
。因此,例如sizeof('A')得出4(如果int类型的对象的大小等于4)。
这里是示范节目
#include <stdio.h> int main(void) { printf( "sizeof( \"Hello\" ) = %zu\n", sizeof( "Hello" ) ); char c = 'A'; printf( "sizeof( char ) = %zu, sizeof( 'A' ) = %zu\n", sizeof( c ), sizeof( 'A' ) ); return 0; }
其输出为
sizeof( "Hello" ) = 6 sizeof( char ) = 1, sizeof( 'A' ) = 4
请注意,
char
类型的值范围取决于编译器选项,并且char类型可以用作signed char
或unsigned char
类型。这样写会更正确]
char 1 byte −128 to 127 %c or char 1 byte 0 to 255 %c
从C标准(5.2.4.2.1整数类型的大小)
2如果将char类型的对象的值视为有符号在表达式中使用整数时,CHAR_MIN的值应为与SCHAR_MIN相同,并且CHAR_MAX的值应相同和SCHAR_MAX一样。否则,CHAR_MIN的值应为0且CHAR_MAX的值应与UCHAR_MAX的值相同。的值UCHAR_MAX等于2CHAR_BIT − 1。
%c
用于打印单个字符值,并期望其对应的参数具有类型char
:
C中没有字符串类型,但是C标准库确实将字符串定义为char s[] = "hello";
char *p = s;
while ( *p != 0 )
putchar( *p++ ); // print the character p points to, then advance
// p to point to the next character in the string
char
的以空字符结尾的数组>
一个字符串是一个连续的字符序列,由第一个空字符终止,包括第一个空字符。
因此,字符串具有字符类型,因此不像“范围”。字符串的“大小”在源代码中确定;没有固定大小。
您试图询问所有这些字符是否一起可以提供更大的范围。答案很简单。