C语言中的数据类型(char)

C语言中的数据类型(char),c,C,如果输入是一个像34456578646467675345这样的大数字,我仍然可以得到输出,这是怎么可能的,因为char的范围是256,所以它不应该接受比这个大的数字,为什么char可以存储这么大的整数 int main() { char b[30]; scanf("%s",b); printf("\n%s",b); return 0; } 您拥有的是一个由30char组成的数组,而不是一个char- char b[30]; //b is an array o

如果输入是一个像34456578646467675345这样的大数字,我仍然可以得到输出,这是怎么可能的,因为char的范围是256,所以它不应该接受比这个大的数字,为什么char可以存储这么大的整数

int main()
{
    char b[30];
    scanf("%s",b);
    printf("\n%s",b);
    return 0;
}

您拥有的是一个由
30
char
组成的数组,而不是一个
char
-

char b[30];   //b is an array of char 

所以
b
的大小是
30*sizeof(char)
。这意味着它可以容纳30个字符(包括
'\0'
)。您的输入存储在此字符数组中(足够提供输入),因此,您可以获得正确的输出

您拥有的是一个由
30
char
组成的数组,而不是一个
char
-

char b[30];   //b is an array of char 
char b[30];
所以
b
的大小是
30*sizeof(char)
。这意味着它可以容纳30个字符(包括
'\0'
)。您的输入存储在此字符数组中(足够提供输入),因此,您可以获得正确的输出

char b[30];
b是一个数组,最多可以存储30个字符

作为对

scanf("%s",b);
您已经输入了18个字符

344565786464675345 
由于
%s
说明符总共包含19个字符,因此在您输入的内容后面追加了一个空字符
\0
。或

b[18]='\0' // Remember the count starts from 0
因此,在数组
b
中仍然有11个可用字节,因为字符是1个字节

请注意,如果您试图在数组中存储字符串,那么该数组将以null结尾,即需要在字符数组的末尾有一个
\0
,才能将该组视为字符串

因此,从技术上讲,您可以使用
char b[30]
获得最多29个字符的字符串,使其成为有效字符串

b是一个数组,最多可以存储30个字符

作为对

scanf("%s",b);
您已经输入了18个字符

344565786464675345 
由于
%s
说明符总共包含19个字符,因此在您输入的内容后面追加了一个空字符
\0
。或

b[18]='\0' // Remember the count starts from 0
因此,在数组
b
中仍然有11个可用字节,因为字符是1个字节

请注意,如果您试图在数组中存储字符串,那么该数组将以null结尾,即需要在字符数组的末尾有一个
\0
,才能将该组视为字符串


因此,从技术上讲,您可以使用
char b[30]
使一个最多29个字符的字符串成为有效字符串。

char和
char
数组之间存在差异,这就是您所拥有的

数组最多可以存储29位数字加上null终止符,但您输入的值不能存储为大整数。相反,它存储为一个字符序列,其中每个字符表示一个数字:

Index of b[]  0   1   2   3   4   5   6   7   8  ...
char value   '3' '4' '4' '5' '6' '5' '7' '8' '6' ...
num value     51  52  52  53  52  53  54  55  54 ...

所有字符的数值范围都可以用单个
char

表示
char
char
数组之间存在差异,这就是您所拥有的

数组最多可以存储29位数字加上null终止符,但您输入的值不能存储为大整数。相反,它存储为一个字符序列,其中每个字符表示一个数字:

Index of b[]  0   1   2   3   4   5   6   7   8  ...
char value   '3' '4' '4' '5' '6' '5' '7' '8' '6' ...
num value     51  52  52  53  52  53  54  55  54 ...


所有字符的数值范围都可以用单个
char

表示。您输入的是字符串,而不是图表。这里有两个为处理大数字而构建的成熟库()。在重新发明轮子之前,也许你想研究一下GMP之类的东西。因为在这个问题之后(你得到了一个大整数),你可能会发现自己在问如何进行减法、加法或乘法……你输入的是一个字符串,而不是一张图表。这里有几个为处理大数字而构建的成熟库()。在重新发明轮子之前,也许你想研究一下GMP之类的东西。因为在这个问题之后(你得到一个大整数),你可能会发现自己在问如何进行减法、加法或乘法……如果B是一个小于10^250的整数,我们可以将这个整数存储为char str[256]@ameyCU@AryamanTodkar最多
10^250
251
位)的数字可以存储在
char str[256]中
。如果B是小于10^250的整数,我们可以将该整数存储为char str[256]@ameyCU@AryamanTodkar最多
10^250
251
位)的数字可以存储在
char str[256]
中。如果B是小于10^250的整数,我们可以将该整数存储为char str[256]@dasblinkenlight@AryamanTodkar对即使我们使用
char
s来表示它的十进制数字,我们也可以这样存储它。谢谢,我得到了它@dasblinkenlight@AryamanTodkar如果我们使用base-256表示,我们可以在104字节中存储10^250,而不是256字节。@AryamanTodkar欢迎您!如果您不再需要帮助解决问题,请考虑通过单击旁边的灰色复选标记来接受答案。这会让其他网站访问者知道您的问题已经解决,也会为您赢得一个全新的堆栈溢出徽章。如果B是小于10^250的整数,我们可以将此整数存储为char str[256]@dasblinkenlight@AryamanTodkar对即使我们使用
char
s来表示它的十进制数字,我们也可以这样存储它。谢谢,我得到了它@dasblinkenlight@AryamanTodkar如果我们使用base-256表示,我们可以在104字节中存储10^250,而不是256字节。@AryamanTodkar欢迎您!如果您不再需要帮助解决问题,请考虑通过单击旁边的灰色复选标记来接受答案。这会让其他网站访问者知道您的问题已经解决,也会为您赢得一个全新的堆栈溢出徽章。如果B是小于10^250的整数,我们可以将该整数存储为char str[256]@sjsam吗?您没有在此处存储该整数;您正在存储一个字符串。请注意,您可以在单个字符中存储从零到255的任何整数的精确表示,在两个字符中存储范围(065535)中的任何整数,依此类推