C中char数据类型的大小,其格式为%s或%c?

问题描述 投票:2回答:5

在互联网上,我发现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,它用于处理字符串。我的问题是:这两种格式的大小和范围是否有差异?谢谢大家!

c types char sizeof c-strings
5个回答
2
投票

A char是单个字符/字母,例如用"%c"打印,例如一个'X'。用"%s"打印的内容是一个由多个字符组成的零终止字符串,可以用例如"foobar"。请注意不同的引号。(顺便说一句,在处理它们并尝试存储它们时,一个常见的错误是没有足够的空间来存储最后的零。通常需要的空间比显而易见的还要多。)]

比较https://en.cppreference.com/w/cpp/io/c/fprintf

%s通常指的“范围”很难定义。可能是书籍。

有时用%s打印的内容称为“ C伪字符串”,但没有这样的数据类型。


2
投票

C中的字符串的定义就像一个字符数组,其中包含以零字符'\ 0'终止的一系列字符。

例如,字符串文字"Hello"具有类型char[6](请考虑终止的零字符)。因此,运算符sizeof( "Hello" )产生值6

转换说明符%s指定输出字符串,并等待一个指向字符串第一个字符的指针。字符串的大小仅受所用系统的资源限制,并且不能大于size_t类型中存储的最大值。

Th转换说明符%c设计为输出类型为char的标量对象。类型为char的对象的大小等于1sizeof(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 charunsigned 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。


0
投票

%c用于打印单个字符值,并期望其对应的参数具有类型char


0
投票

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的以空字符结尾的数组>

一个字符串是一个连续的字符序列,由第一个空字符终止,包括第一个空字符。


0
投票
在C中,字符串本身不是类型。它是字符对象的序列。

因此,字符串具有字符类型,因此不像“范围”。字符串的“大小”在源代码中确定;没有固定大小。

您试图询问所有这些字符是否一起可以提供更大的范围。答案很简单。

© www.soinside.com 2019 - 2024. All rights reserved.